当前位置:   article > 正文

插入排序超详细讲解C语言_c语言插入排序详细解释

c语言插入排序详细解释


插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

算法步骤

将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面)。

动图演示

img

静图演示

image-20220828135143397

代码实现

void InsertSort(int* a, int n){
    for(int i = 0; i < n - 1; i++){//用i来调整end
        int end = i;//已排序序列[0, end]
        int tmp = a[end + 1];//向已排序序列中插入数据a[end + 1],先将未排序数据a[end + 1]保存到tmp
        while(end >= 0){//在已排序序列中从后向前扫描,找到合适的插入位置时,退出循环
            if(tmp < a[end]){//如果tmp<a[end]则a[end]向后移动(升序)
                a[end + 1] = a[end];
                end--;
            }
            else{
                break;//因为[0,end]是有序序列,如果tmp>=a[end],则将tmp插入到end+1位置即可
            }
        }
        a[end + 1] = tmp;//退出循环后,将tmp插入找到的合适的位置
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

复杂度、稳定性分析

  1. 时间复杂度

    设有N个元素待排

    假设这N个元素是有序的,只需要遍历一遍每个元素,那么最好情况下的时间复杂度为 O ( N ) O(N) O(N)

    假设这N个元素是无序的,那么插入第N个元素时,最坏需要比较N-1次,总的最坏的比较次数为 1 + 2 + 3 + . . . + ( N − 1 ) 1+2+3+...+(N-1) 1+2+3+...+(N1),等差数列求和,结果为 N 2 / 2 N^{2}/2 N2/2,所以最坏情况下的时间复杂度为 O ( N 2 ) O(N^{2}) O(N2)

  2. 空间复杂度

    仅仅使用了常数个辅助单元,空间复杂度是O(1);

  3. 稳定性

    插入排序,不会改变相同元素的相对顺序,所以是稳定的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/821396
推荐阅读
相关标签
  

闽ICP备14008679号