|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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]);
- }
- }
复制代码 |
|