2.插入排序

1. 概念

将当前元素插入到已经有序的数组中适当的位置。

2. 实现流程

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  5. 将新元素插入到该位置后
  6. 重复步骤2~5

3.算法图解

插入排序
插入排序

4.代码实现

void insertion_sort(int arr[],int len) {

    int i,j;
    int temp;

    for (i = 0 ; i < len ; i ++) {
        temp = arr[i];
        for (j = i - 1; j >= 0 && arr[j] > temp; j--) {
            arr[j+1] = arr[j];
        }
        arr[j+1] = temp;
    }

}

5.时间复杂度

最差时间复杂度 O( n^2 )
最优时间复杂度 O( n )
平均时间复杂度 O( n^2 )

最差空间复杂度 O( n ),需要辅助空间O(1)

如果原始序列是I的,插入排序的效果是非常好的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容