算法之插入排序

来源:互联网 发布:为什么微博没有mac版 编辑:程序博客网 时间:2024/04/25 06:29
    算法是程序的灵魂,李开复老师这样说过。是的,人没了灵魂,就成尸体了。同样的,一段代码、一个程序没有了算法,那么也就是一堆数字,不会有任何生机。因此想成为优秀的程序员,应该掌握一定的算法。算法有很多种,今天就来学习学习插入排序。

什么是插入排序?

    有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法

【插入排序的思路】

    插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,适用于少量数据的排序。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中,直到全部插入完为止。

【举例插入排序】

例如:已知待排序的一组纪录是: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]的位置上。

【小结】

   算法非常重要,理论只是了解了,还需要代码实现,实践才是检验真理的唯一标准,下一步是代码实现,加油!

0 0