【插入排序】 - 直接插入排序
2017-03-03 23:30
155 查看
插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
例如,已知待排序的一组纪录是:
60,71,49,11,24,3,66
假设在排序过程中,前3个纪录已按关键码值递增的次序重新排列,构成一个有序序列:
49,60,71
将待排序纪录中的第4个纪录(即11)插入上述有序序列,以得到一个新的含4个纪录的有序序列。首先,应找到11的插入位置,再进行插入。可以讲11放入数组的第一个单元r[0]中,这个单元称为监视哨,然后从71起从右到左查找,11小于71,将71右移一个位置,11小于60,又将60右移一个位置,11小于49,又再将49右移一个位置,这时再将11与r[0]的值比较,11≥r[0],它的插入位置就是r[1]。假设11大于第一个值r[1]。它的插入位置应该在r[1]和r[2]之间,由于60已经右移了,留出来的位置正好留给11.后面的纪录依照同样的方法逐个插入到该有序序列中。若纪录数n,续进行n-1趟排序,才能完成。
直接插入排序的算法思路:
(1) 设置监视哨r[0],将待插入纪录的值赋值给r[0];
(2) 设置开始查找的位置j;
(3) 在数组中进行搜索,搜索中将第j个纪录后移,直至r[0].key≥r[j].key为止;
(4) 将r[0]插入r[j+1]的位置上。
例如,已知待排序的一组纪录是:
60,71,49,11,24,3,66
假设在排序过程中,前3个纪录已按关键码值递增的次序重新排列,构成一个有序序列:
49,60,71
将待排序纪录中的第4个纪录(即11)插入上述有序序列,以得到一个新的含4个纪录的有序序列。首先,应找到11的插入位置,再进行插入。可以讲11放入数组的第一个单元r[0]中,这个单元称为监视哨,然后从71起从右到左查找,11小于71,将71右移一个位置,11小于60,又将60右移一个位置,11小于49,又再将49右移一个位置,这时再将11与r[0]的值比较,11≥r[0],它的插入位置就是r[1]。假设11大于第一个值r[1]。它的插入位置应该在r[1]和r[2]之间,由于60已经右移了,留出来的位置正好留给11.后面的纪录依照同样的方法逐个插入到该有序序列中。若纪录数n,续进行n-1趟排序,才能完成。
直接插入排序的算法思路:
(1) 设置监视哨r[0],将待插入纪录的值赋值给r[0];
(2) 设置开始查找的位置j;
(3) 在数组中进行搜索,搜索中将第j个纪录后移,直至r[0].key≥r[j].key为止;
(4) 将r[0]插入r[j+1]的位置上。
相关文章推荐
- 插入排序——直接插入排序
- 插入排序 直接插入排序的PHP实现 Straight Insertion Sort
- 数据结构图文解析之:直接插入排序及其优化(二分插入排序)解析及C++实现
- 通俗理解插入排序(直接插入排序,折半插入排序,希尔排序)
- 排序一:插入排序(直接插入排序)
- java算法之二直接插入排序(插入排序)
- 插入排序(直接插入排序 and 希尔排序)
- PHP之八大排序算法--插入排序(-)直接插入排序
- 插入排序(直接插入排序--折半插入排序--谢尔排序)
- java实现排序算法之插入排序(直接插入排序,折半插入排序,希尔排序)
- Java排序之插入排序[直接插入排序](3)
- 内部插入排序---直接插入排序
- 【Java常用排序算法】插入排序(直接插入排序、希尔排序)
- 插入排序——直接插入排序和希尔排序,C++代码实现
- PHP 插入排序 -- 直接插入排序
- C++代码,数据结构-内部排序-插入排序-直接插入排序
- java排序之插入排序(直接插入排序和希尔排序)
- 插入排序(直接插入排序和希尔排序)
- 【排序】插入排序(直接插入排序、希尔排序)
- 插入排序(一)—直接插入排序