算法不会,尚能饭否之排序——折半插入排序(Binary Insert Sort)
还是排序,上一篇讲的是排序大家庭中的直接插入排序,今天呢,主要讲的是折半插入排
序。实现起来,还是蛮简单的,没有太多的拐弯抹角的,不会伤害很多脑细胞的。人家都
说了,编程,如何提高自己的编程技术呢?那就是多写代码,如何写呢?就是抛开课本,拿着
笔和纸,现在纸上走一遍算法(这个前提是算法思想已经熟透了),然后,在写出来,编译,
运行。就是这样。很简单的。其实,在写这些简单的算法的时候,没有太多的技术问题,就是
一个如何提高自己的编程水平的问题,一种整体把握的能力。你能一次就把折半插入排序写
好,编译,运行通过吗?还好!我做到了(这里牛皮不是吹的!)。
算法思想:在顺序表中,v[0], v[1], v[2],……v[n - 1], v[n],而前n个数是已经排好的,现
在你的任务就是用折半排序将v[n]插入到已经排好的序列中。现在开始,定位。iLeft表示最左
边元素的位置,iRight表示最右边元素的位置,看好了,是位置,而不是值。iLeft = 0;
iRight = n – 1; 现在开始是定位中间位置的时候,iMiddle = (iLeft + iRight) / 2;如果v[n]比
v[iMiddle]大的话,就将iLeft = iMiddle + 1;否则,iRight = iMiddle – 1;然后就是循环上面
的动作,就此,一个全新的折半插入排序就诞生了。
贴出代码:
注:本程序在visual studio 2008下编译通过,如有错误,请使用visual studio 2008.谢谢合作。
好了,就写到这里了,如果对代码还有什么疑问,请跟帖提出,或者直接加我QQ:535064959.你我互相学习,共同提高,谢谢合作!
现在可以享受自己的成果的时候了。