案例:
一趟快速排序的过程:
代码:
#include
void Qsort(int arr[], int low, int high){
if (high <= low) return;
int i = low;
int j = high + 1;
int key = arr[low];
while (true)
{
/*从左向右找比key大的值*/
while (arr[++i] < key)
{
if (i == high){
break;
}
}
/*从右向左找比key小的值*/
while (arr[--j] > key)
{
if (j == low){
break;
}
}
if (i >= j) break;
printf("a[%d] = %d\ta[%d] = %d\n", i, arr[i], j, arr[j]);
/*交换i,j对应的值*/
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
for (int m = 0; m <= high; m++) {
printf("%d\t", arr[m]);
}
printf("\n");
}
/*中枢值与j对应值交换*/
int temp = arr[low];
arr[low] = arr[j];
arr[j] = temp;
printf("\n\n一趟排序结果\n");
for (int m = 0; m <= high; m++) {
printf("%d\t", arr[m]);
}
printf("\n");
//递归调用函数,分别对两边进行同样的操作
Qsort(arr, low, j - 1);
Qsort(arr, j + 1, high);
}
int main()
{
int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24};
printf("------------------初始序列star------------------\n");
for (int m = 0; m < 9; m++) {
printf("%d\t", a[m]);
}
printf("\n------------------初始序列end------------------\n");
printf("\n");
Qsort(a, 0, 8);/*这里原文第三个参数要减1否则内存越界*/
printf("\n\n最终结果\n");
for(int i = 0; i < 9; i++)
{
printf("%d\t", a[i]);
}
return 0;
}
运行结果:
------------------初始序列star------------------
57 68 59 52 72 28 96 33 24
------------------初始序列end------------------
a[1] = 68 a[8] = 24
57 24 59 52 72 28 96 33 68
a[2] = 59 a[7] = 33
57 24 33 52 72 28 96 59 68
a[4] = 72 a[5] = 28
57 24 33 52 28 72 96 59 68
一趟排序结果
28 24 33 52 57 72 96 59 68
一趟排序结果
24 28 33 52
一趟排序结果
24 28 33 52
a[6] = 96 a[8] = 68
24 28 33 52 57 72 68 59 96
一趟排序结果
24 28 33 52 57 59 68 72 96
一趟排序结果
24 28 33 52 57 59 68
最终结果
24 28 33 52 57 59 68 72 96
--------------------------------