梳子排序实现没有准确排序,C ++

时间:2015-10-19 20:03:51

标签: c++ sorting

我试图在维基百科上实现梳子排序的伪代码,但它似乎对我给出的样本数组进行排序。有什么提示吗?

void combSort(int* list, int length)
{
bool swapper;
int gap = length;
double shrink = 1.25;
int temp;
do{
    gap = (int) gap/shrink;
    if (gap < 1)
        gap = 1;

    swapper = false;
    for (int i=0;(i+gap)<length;i++){
        if (list[i] > list[i+gap]){
            swap(list[i],list[i+gap]);
            swapper = true;
        }
    }
}
while ((gap > 1) && (swapper == true));
}

1 个答案:

答案 0 :(得分:3)

根据维基百科文档,您应该更改最后一个谓词。 有效的解决方案:

void combSort(int* list, int length)
{
    bool swapper;
    int gap = length;
    double shrink = 1.25;
    int temp;
    do {
        gap = (int)gap / shrink;
        if (gap < 1)
            gap = 1;

        swapper = false;
        for (int i = 0; (i + gap)<length; i++) {
            if (list[i] > list[i + gap]) {
                swap(list[i], list[i + gap]);
                swapper = true;
            }
        }
    } while ((gap > 1) || (swapper == true));
}

更改了行: while((gap&gt; 1)||(swapper == true));