我正在设置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对于这种类型的数组不起作用
答案 0 :(得分:3)
您必须将swap = 0;
放在for
循环之前。
如果您在整个周期中没有交换任何内容,则想更改gap
的值。在您当前的实现中,您可能已交换了值,例如i=1
,但是您将在下一个循环中重置swap=0
,因此只有将值交换为{{1}的最后一个值时,您才使用相同的gap
重新进行迭代。 }。如果您会在i
旁边显示swap
的值,则可能自己已经看到了问题。 (我假设arrDisp
是用于显示数组内容的函数。此函数调用在原始问题中已被编辑。)
arrDisp