马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
问题在第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[j] > pivot && j >= i)
{
j--;
}
//从左到右找到大于pivot的数据的位置
while(array[i] < pivot && i <= j)
{
i++;
}
temp = array[j];
array[j] = array[i];
array[i] = temp;
i++;
j--;
}
//array[i] = 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[0]);
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[i]);
}
}
|