直接插入排序
2018-03-18 09:43
141 查看
【分类】
插入类排序【基本思想】
通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。【工作原理】
工作原理类似于抓扑克排序步骤:
从第一个元素开始,该元素可以认为已经被排序
取出下一个元素,在已经排序的元素序列中从后向前扫描
如果该元素(已排序)大于新元素,将该元素移到下一位置
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
将新元素插入到该位置后
重复步骤2~5
【特点】
数据结构:数组稳定性:稳定
【过程】
初始关键字: 『 6,5,3,1,8,7,2,4 』 第一趟排序: 『 6 』,5,3,1,8,7,2,4 第二趟排序: 6,5,3,1,8,7,2,4 『 6,5 』,3,1,8,7,2,4第三趟排序: 5,6,3,1,8,7,2,4 5,『6,3』,1,8,7,2,4 『5,3』,6,1,8,7,2,4第四趟排序: 3,5,6,1,8,7,2,4 3,『5,1』,6,8,7,2,4 『 3,1』,5 ,6,8,7,2,4第五趟排序: 1,3,5 ,6,8,7,2,4 1,3,5,『6,8』,7,2,4 第六趟排序: 1,3,5 ,6 ,8,7,2,4 1,3,5,6,『8,7』,2,4 1,3,5,『6,7』,8,2,4 第七趟排序: 1,3,5 ,6 ,7,8,2,4 1,3,5,6,7,『8,2』,41,3,5,6,『7
e3a7
,2』,8,4
1,3,5,『6,2』,7,8,4
1,3,『5,2』,6,7,8,4 1,『3,2』,5,6,7,8,4 『1,2』,3,5,6,7,8,4第八趟排序: 1,2,3,5,6,7,8,4
1,2,3,5,6,7,『8,4 』
1,2,3,5,6,『7,4』,8
1,2,3,5,『6,4』,7,8 1,2,3,『5,4』,6,7,8 1,2,『3,4』,5,6,7,8 结果: 『 1,2,3,4,5,6,7,8 』
排序过程 宏观过程
【复杂度与辅助空间】
最差时间复杂度:O(n^2) (输入情况是降序排列时) 最优时间复杂度:O(n) (输入情况是升序排列时) 平均时间复杂度:O(n^2) 所需辅助空间:O(1)【源程序】
//A:输入数组,len:数组长度 void insert_sort(int A[],int len) { int temp; int i,j; for(i=1;i<len;i++) { j=i-1;//右手抓到一扑克 temp=A[i];//拿在左手上的牌总是排序好的 while(j>=0&&A[j]>temp)//查找到要插入的位置 { A[j+1]=A[j];//如果该手牌比抓到的牌大,就将其右移 j--; } if(j!=i-1) A[j+1]=temp;//直到该手牌比抓到的牌小(或相等),将抓到的牌插入到该手牌右边 } }
相关文章推荐
- 直接插入排序、希尔排序、冒泡排序、快速排序
- 利用数组实现直接插入排序
- 排序3-直接插入排序
- 直接插入排序 java实现
- 直接插入排序的最简单实现
- 数据结构 直接插入排序
- JAVA排序算法---直接插入排序
- 排序算法之直接插入排序----java实现
- 直接插入排序
- C++模板实现直接插入排序
- 【算法】直接插入排序
- 插入排序—直接插入排序(Straight Insertion Sort)
- 直接插入排序 .
- C语言实现直接插入排序,冒泡排序以及二分查找(巩固理解记忆)
- java实现直接插入排序
- 直接插入排序
- 排序算法之直接插入排序
- 排序算法原理及其Java代码(快速排序、冒泡排序、直接插入排序、简单选择排序)
- 第十六周项目1-验证算法之直接插入排序
- 直接插入排序(带哨兵和不带哨兵)