关于快速排序的代码问题,求大佬帮帮忙
问题在第11行到14行的注释:请大佬指点迷津#include <stdio.h>
void Quick_sort(int array[], int left, int right);
void Quick_sort(int array[], int left, int right)
{
int pivot = array[(left + right) / 2];
int i = left, j = right;
int temp;
//经过测试(不论是奇数个数据项,还是偶数个):发现如果循环条件采用j >= i;并且在交换后,不进行i++与j--,
//那么会进入i = j 的死循环
//如果循环条件采用j > i。且在进行交换后,不进行i++与j--,
//任然会陷入死循环。为什么?
while(j > i)
{
//从右到左找到小于pivot的数据的位置
while(array > pivot && j >= i)
{
j--;
}
//从左到右找到大于pivot的数据的位置
while(array < pivot && i <= j)
{
i++;
}
temp = array;
array = array;
array = temp;
i++;
j--;
}
//array = pivot;
if(j > left)
{
Quick_sort(array, left, j);
}
if(i < right)
{
Quick_sort(array, i, right);
}
}
int main(void)
{
int array[] = {73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109};
int i, length, left, right;
length = sizeof(array) / sizeof(array);
left = 0;
right = length-1;
Quick_sort(array, left, right);
printf("排序完成!\n");
for(i = 0; i < length; i++)
{
printf("array[%d] = %d\n", i, array);
}
} 兄弟,你少了一个条件当然会卡死啦,如何有j <= i 的情况,就走下面两个if , 问题是你 while还是不满足, 上面的变量的值也没改变, 所有又走回两个if, 能不卡死吗?
页:
[1]