这个是升序排列,如果想降序排列,将下面两行的符号反过来即可;
arr[right] <= arr[key]
arr[left] >= arr[key]
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>void swap(int *v1, int *v2)
{int temp = *v1;*v1 = *v2;*v2 = temp;
}void my_qsort(int *arr, int start, int end)
{int key = start;int left = start;int right = end;if (left > right){return;}while (left < right){while ((left < right) && (arr[right] >= arr[key])){right--;}while ((left < right) && (arr[left] <= arr[key])){left++;}swap(&arr[left], &arr[right]);}swap(&arr[key], &arr[right]);key = right;my_qsort(arr, start, key - 1);my_qsort(arr, key + 1, end);return;
}int main()
{int i = 0;int arr[] = { 10, 6, 9, 1, 8, 7, 5, 4, 2, 3 };int num = sizeof(arr) / sizeof(int);my_qsort(arr, 0, num - 1);printf("排序后:");for (i = 0; i < num; i++){printf("%d ", arr[i]);}printf("\n");return 0;
}
运行结果