您的位置:首页 > 其它

【插入排序】 - 直接插入排序

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]的位置上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  插入排序