直接插入排序

Posted jpzhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了直接插入排序相关的知识,希望对你有一定的参考价值。

概念

直接插入排序是一种最简单的排序方法,排序过程为:先将第一个元素看作是只有一个元素的有序子表,然后从第二个元素开始,将待排序元素依次插入到前面有序的子表中,直到全部排序完毕。在整个过程中,前面的元素是已经排序号的列表,后面的元素为待排序处理。

 

如下排序是将列表{ 7,3,5,4,6 }升序的排序过程。

技术图片

代码实现

 1 void InsertSort(vector<int> &nums)
 2 {
 3     //nums.insert(nums.begin(), 0);//插入一个哨兵
 4     int i, j;
 5     int len = nums.size();
 6     for (i = 1; i < len; i++)
 7     {
 8         int temp = nums[i];
 9         for (j = i - 1; j >= 0; j--)
10         {
11             if (temp < nums[j])
12                 nums[j + 1] = nums[j];////在有序列表中比soldier值大的元素后移
13             else
14                 break;//soldier大于有序表中的最后一位则不需要移动
15         }
16         nums[j + 1] = temp;//在正确位置上插入
17     }
18 }

性能

最好:有序,O(n)

最坏:逆序,比较(n+2)(n-1)/2   移动(n+4)(n-1)/2

平均:O(n^2)

稳定性:稳定

 

以上是关于直接插入排序的主要内容,如果未能解决你的问题,请参考以下文章

7种基本排序算法的Java实现

直接插入排序 ,折半插入排序 ,简单选择排序, 希尔排序 ,冒泡排序 ,快速排序 ,堆排序 ,归并排序的图示以及代码,十分清楚

排序算法学习(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序)

直接插入折半插入希尔排序

直接插入折半插入希尔排序

直接插入排序算法——Java实现