排序算法——梳排序 Comb sort

梳排序(Comb sort)是一种不稳定的排序算法,它是冒泡排序的优化版本。其原理与希尔排序类似,在原始的冒泡排序算法中,每次只比较序列中的相邻两个元素,即比较的两元素的间距(Gap)是1,而梳排序初始时两两比较的两元素的间距比1大,并在循环中以固定的比率递减,通常递减率为1.3,直到间距减小到1为止。

递减率的设定影响着梳排序的效率,原作者以随机数作实验,得到最有效递减率为1.3的。如果此比率太小,则导致一循环中有过多的比较,如果比率太大,则不能有效消除阵列中的乌龟(即在阵列尾部的小数值)。

以输入数组 [8 4 3 7 6 5 2 1] 为例

数组长度为8,有8÷1.3=6,则比较8和2,4和1,并做交换

[8 4 3 7 6 5 2 1]

交换得

[2 1 3 7 6 5 8 4]

接着循环,更新间距为6÷1.3=4,比较2和6,1和5,3和8,7和4

[2 1 3 7 6 5 8 4]

只有7和4需要交换,交换得

[2 1 3 4 6 5 8 7]

接着循环,更新距离为3,没有交换

接着循环,更新距离为2,没有交换

接着循环,更新距离为1,需要三次交换

[2 1 3 4 6 5 8 7]

交换后的结果为 [1 2 3 4 5 6 7 8] 即为所求有序序列。

 

C++实现

#include<bits/stdc++.h>
using namespace std;

// To find gap between elements
int getNextGap(int gap)
{
    // Shrink gap by Shrink factor
    gap = (gap*10)/13;

    if (gap < 1)
        return 1;
    return gap;
}

// Function to sort a[0..n-1] 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章