GapSort或ShellSort无法正确交换

时间:2019-06-07 13:32:12

标签: c sorting

我正在设置GapSort程序,因为某些数组代码无法正常工作。我想念什么?

void main()
{
    int eX[10] = {1, 3, 49, 29, 20, 8, 28, 24, 10, 29};
    int eXlen = sizeof(eX) / sizeof(int);
    gapSort(eX, eXlen);
} 
void gapSort(int arr[], int len)
    {
        int temp, gap, swap;
        gap = len / 2;
        while (1)
        {
            for (int i = 0; i < len - gap; i++)
            {
                swap = 0;
                if (arr[i] > arr[i + gap])
                {
                    temp = arr[i];
                    arr[i] = arr[i + gap];
                    arr[i + gap] = temp;
                    swap = 1;
                }
            }
            if (swap == 0)
            {
                if (gap == 1)
                    break;
                gap /= 2;
            }
        }
    }

1、3、49、29、20、8、28、24、10、29对于这种类型的数组不起作用

1 个答案:

答案 0 :(得分:3)

您必须将swap = 0;放在for循环之前。

如果您在整个周期中没有交换任何内容,则想更改gap的值。在您当前的实现中,您可能已交换了值,例如i=1,但是您将在下一个循环中重置swap=0,因此只有将值交换为{{1}的最后一个值时,您才使用相同的gap重新进行迭代。 }。如果您会在i旁边显示swap的值,则可能自己已经看到了问题。 (我假设arrDisp是用于显示数组内容的函数。此函数调用在原始问题中已被编辑。)

arrDisp