美文网首页
插入、冒泡、选择三种排序算法比较

插入、冒泡、选择三种排序算法比较

作者: _笑口常开 | 来源:发表于2020-09-06 18:30 被阅读0次

先说结论:

  • 插入排序和冒泡排序比较,就时间复杂度而言:最好、最坏以及平均时间复杂度一样,但是插入排序的数据移动相对于冒泡排序的数据交换,赋值语句更少,所以优先选择插入排序;
  • 选择排序最坏的时间复杂度是O(n^2),相对于插入排序或冒泡排序的O(n)已经低人一等;而且选择排序是非稳定排序,效果不理想;

三种算法代码实现

插入排序算法代码:(1-i模式)

//实现一
void insert_sort(int arr[], int size) {
    int i, j, tmp;
    for(i=1; i<size; i++) {
        tmp = arr[i];
        for(j=i; j>0 && arr[j-1]>tmp; j--) {
            arr[j] = arr[j-1]; //数据移动,一行代码
        }
        arr[j] = tmp; //找到j的位置,插入进去      
    }
}

//实现二
void insert_sort(int arr[], int size) {
    int i, j, tmp;
    for(i=1; i<size; i++) {
        tmp = arr[i];
        for(j=i; j>0; j--) {
            if(arr[j-1]>tmp) {
                arr[j] = arr[j-1]; //数据移动,一行代码
            } else {
                break;
            }
        }
        arr[j] = tmp; //找到j的位置,插入进去      
    }
}

冒泡排序算法代码:(0-0模式)

//实现一
void bubble_sort(int arr[], int size) {
    int i, j, tmp;
    for(i=0; i<size-1; i++) {
        for(j=0; j<size-1-i; j++) {  //数据交换三行代码比较多,耗时长
              if(arr[j] > arr[j+1]) {
                    tmp = arr[j+1];
                    arr[j+1] = arr[j];
                    arr[j] = tmp;
              }  
        }
}
//实现二:加flag 优化
void bubble_sort(int arr[], int size) {
    int i, j, tmp;
    
    for(i=0; i<size-1; i++) {
        int exchangeFlag = 0;
        for(j=0; j<size-1-i; j++) {
              if(arr[j] > arr[j+1]) {  // 数据交换三行代码比较多,耗时长
                    tmp = arr[j+1];
                    arr[j+1] = arr[j];
                    arr[j] = tmp;
                    exchangeFlag = 1; // 表示有数据交换
              }  
        }
        if (0 == exchangeFlag) break; // 没有数据交换,已经排好序了,提前退出
    }
}

选择排序代码:(0-i+1模式)

void select_sort(int arr[], int size) {
      int i, j, min;
      for(i=0; i<size-1; i++) {
          min = arr[i];
          for(j=i+1; j<size; j++) {
              if(arr[j] < min) {
                  min = arr[j];
                  arr[j] = arr[i];
                  arr[i] = min;
              }
          }
      }
}

其他补充

算法评价标准

  • 排序算法的执行效率

时间复杂度:最好情况、最坏情况、平均情况时间复杂度;
时间复杂度的系数、常数 、低阶:实际情况小规模数据,不涉及到无穷大情况;
比较次数和交换(或移动)次数;

  • 排序算法的内存消耗

空间复杂度;
原地排序(Sorted in place)。原地排序算法,就是特指空间复杂度是 O(1) 的排序算法; 是否是原地排序

  • 排序算法的稳定性

如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变。


引用:

11 | 排序(上):为什么插入排序比冒泡排序更受欢迎?

相关文章

  • 图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序

    图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序 图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序

  • 冒泡排序、插入排序、选择排序

    三种算法对比: 冒泡排序 插入排序 选择排序 测试 提升 冒泡排序和插入排序的时间复杂度都是 O(n2),都是原地...

  • 算法学习之简单排序

    简单排序 简单排序有三种, 冒泡排序,选择排序,插入排序 冒泡排序 冒泡排序是一种易于实现的排序算法, 以升序为例...

  • 排序算法

    概述 常用排序算法 冒泡排序 插入排序 选择排序 归并排序 快速排序 冒泡排序 步骤 比较相邻元素,如果前面元素比...

  • 排序算法

    排序算法 非线性时间比较类排序 交换排序 冒泡排序 快速排序 插入排序 插入排序 希尔排序 选择排序 简单选择排序...

  • 面试基础算法复习

    排序算法 选择排序、冒泡排序、插入排序三种排序算法可以总结为如下:都将数组分为已排序部分和未排序部分。选择排序将已...

  • 排序算法☞冒泡排序,插入排序,选择排序

    排序算法有很多,这里简单谈谈冒泡,插入,选择排序算法:1、冒泡排序:这个应该是比较常见,而且面试经常会考的。该排序...

  • 排序算法(dart实现)

    排序算法 [toc] 10大经典排序比较 冒泡、选择、插入、归并、快速、希尔、堆排序,属于比较排序(Compari...

  • Sort Algorithm

    排序算法 首先要讨论的是O(n^2)的算法。主要有冒泡排序,选择排序,插入排序。冒泡排序比较常见这里不细说。 ①选...

  • 关于JavaScript-2:基本排序算法

    基本排序算法 1.冒泡排序 示例代码: 2.插入法排序 示例代码: 3.选择排序 示例代码: 以上三种排序算法个人...

网友评论

      本文标题:插入、冒泡、选择三种排序算法比较

      本文链接:https://www.haomeiwen.com/subject/mzwcektx.html