直接插入排序
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)
稳定性:稳定
以上是关于直接插入排序的主要内容,如果未能解决你的问题,请参考以下文章
直接插入排序 ,折半插入排序 ,简单选择排序, 希尔排序 ,冒泡排序 ,快速排序 ,堆排序 ,归并排序的图示以及代码,十分清楚