为何我的快速排序是死循环啊,多谢
#include <stdio.h>
#include <stdlib.h>
void Func(int iArray[], int, int);
int main()
{
int a[8] = {8, 7, 6, 5, 4, 3, 2, 1};
Func(a, 0, 7);
int k;
for(k = 0; k != 8; k ++)
{
printf( "%2d ", a[k]);
}
return 0;
}
void Func(int iArray[], int left, int right)
{
int i, j;
i = left, j = right;
int iRef = iArray[left];
while(i != j)
{
while(iArray[j] > iRef && j > i)
j --;
if(iArray[j] < iRef)
{
int temp;
temp = iArray[i];
iArray[i] = iArray[j];
iArray[j] = temp;
}
while(iArray[i] < iRef && j > i)
i ++;
if(iArray[i] > iRef)
{
int temp;
temp = iArray[i];
iArray[i] = iArray[j];
iArray[j] = temp;
}
}
iArray[i] = iRef;
Func(iArray, left, i - 1);
Func(iArray, i + 1, right);
}
[解决办法]
if(iArray[i] > iRef)
{
int temp;
temp = iArray[i];
iArray[i] = iArray[j];
iArray[j] = temp;
}
显然不应该有两个这个过程 ~
while(iArray[j] > iRef && j > i)
j --;
while(iArray[i] < iRef && j > i)
i ++;
然后对换 iArray[i] 和 iArray[j] 即可 ~
【注意第一个元素的处理】