排序算法:希尔排序(更高效的插入法排序)

希尔排序:
      希尔排序,英文名Shell Sort,又被称为缩小增量排序。无论是中文名,英文名,还是别名,都透露着一股学渣不可侵犯的“神圣”感。当初学习插入法的时候,一看到这么接地气的名字,学起来也有信心。但是看到希尔排序这高端大气上档次的名字,一下子就起了退避三舍的心思。那么,希尔排序真的就这么的拒人于千里之外吗?其实学会了希尔排序的思路后,就不觉得它有多难了。

      希尔排序其实也是插入排序的一种,不过希尔排序是将序列按下标的一定增量分组,分别对每组序列……

阅读更多

排序算法:二分法插入排序

二分法插入排序:
      在上一篇文章排序算法:插入排序中,介绍了插入排序。其中,插入排序的“插入”二字体现于在寻找有序区间[R0,Ri-1]内第一个比Ri小的Rx,然后将Ri插入Rx之后,如果Ri>Ri-1,那正好,Ri不需要再与有序区间的其他元素比较。
      二分法插入排序沿用了插入排序的思路,而且由于[R0,Ri-1]是有序序列,在寻找Ri的插入位置时,可以采用二分查找法搜索有序区间中比第一个Ri小的元素,这样就减少了比较次数,提高了插入排序算法的性能。

以长……

阅读更多

排序算法:插入排序

插入排序思路:
      对于长度为n的序列来说,在插入元素Ri(i=1,2,…,n-1)时,序列被划分为两个区间,分别是[R0,Ri-1]和[Ri,Rn-1],其中[R0,Ri-1]已经排好序,即Ri-1>=Ri-2>=…>=R0,而[Ri,Rn-1]为待排序列。将Ri分别与Ri-1,Ri-2,…,R0比较,当Ri<=Rx时,将Ri插入Rx之前(若Ri>=Ri-1,则Ri不需要移动位置)。此时有序序列的区间元素又增加一位。当从i=1进行上述排序操作知道i=n-1时,序列将变为有序。

以长度为6的序列 {6,3,5,4,……

阅读更多

排序算法:选择排序

选择排序思路:
      每次从序列中选取最小的元素与序列前端的元素交换,依次类推,对于长度为n的序列,进行n-1趟排序后序列将变为有序。
      由于每趟排序过程中,都是比较完成后才进行交换,所以选择排序的交换次数为n-1次,如果考虑到最小元素可能就是当前元素无需交换,则选择排序的交换次数<=n-1。

以长度为6的序列 {6,3,5,4,1,2} 的选择排序过程做示范:
第一趟排序:[1] 3 5 4 6 2 (最小元素1与6交换)
第二趟排序:[1 2]……

阅读更多

排序算法:冒泡排序

冒泡法排序思路:
      先将序列中的第一个记录R1与第二个记录R2比较,若R1>R2,则把R1,R2交换位置,然后处理新的R2,R3,直到Rn-1和Rn也做了上述操作,此时就完成了一趟排序,由上述的操作可知,最大的记录将被交换的第n位上。在执行下一趟排序时,因为前一趟排序已将序列最大值排到最后,所以只需进行n-1次比较,即将第二大的记录交换到第n-1位。依次类推,直到做完n-1趟比较,序列将变为有序序列。
      由于上述的排序过程中,越大的元素会经由交换慢慢“浮”到……

阅读更多