梳子排序不适用于C ++

时间:2014-01-03 16:02:49

标签: c++ sorting

我在尝试用c ++编写梳子排序时遇到了问题。我看不出我做错了什么,它只是没有对列表进行排序。

 void comb()
{
    int gap = 9;
    int temp;
    double shrink = 1.3;
    bool swapped;
    do
    {
        gap = int (gap/shrink);
        if (gap < 1)
        {
            gap = 1;
        }
        swapped = false;
        for (i = 0; (i + gap) <= 10; i++)
        {
            if (list[i] > list[i + gap])
            {
                temp = list[i];
                list[i] = list[i + gap];
                list[i + gap] = temp;
                swapped = true;
            }
        }
        arrayout();
    }
    while ((gap > 1) & (swapped == true));
}

2 个答案:

答案 0 :(得分:1)

首先,我不会硬编码9和10。

其次,我假设arrayout()打印数组?你在循环之前就是这样做的,然后才进行排序。在循环之后将其移动到最后。

第三,AND运算符为&&而非&&是一个按位,而不是你想要的。

否则,它看起来不错。

答案 1 :(得分:0)

想象一下第一次使用数组[1, 8, 7, 5, 4, 3, 2, 1, 6, 9]a[0] < a[9],所以它不会被交换。

现在进入while测试:gap >1swapped为假。所以你退出。

如果任何间隙尺寸的所有项目都已按顺序排列,您将遇到同样的问题。 在开始测试swapped之前,您需要一直缩小到间隙大小1。

(@ dsa42是正确的,它应该是&&,但这不会改变逻辑错误。)