1. /*
    2. 快速排序:
    3. 快速排序是一个典型的递归操作,这里我们描述一下一次快速排序的过程:我们会将数组的首元素作为枢纽元素,分设两个下标,low
    4. 为左边开始,high从末尾元素开始,先从high开始寻找第一个小于pivot的元素,紧接着从low开始寻找第一个大于pivot的元素,直至low==high
    5. 然后根据我们返回的pivotpos将数组划分为两个子表,进行递归操作
    6. */
    7. #include <stdio.h>
    8. #include <stdlib.h>
    9. int partition(int *arr, int low, int high) {//该函数进行一次快速排序并返回基准元素最终所在位置
    10. int pivot = arr[low];//枢纽元素
    11. while (low < high) {
    12. while (low < high&&arr[high] >= pivot)--high;//从high往下找第一个小于pivot的元素
    13. arr[low] = arr[high];//移到low所在的位置
    14. while (low < high&&arr[low] <= pivot)++low;//从low往上找第一个大于pivot的元素
    15. arr[high] = arr[low];//移到high所在的位置
    16. }
    17. arr[low] = pivot;
    18. return low;//返回存放枢纽的最终位置
    19. }
    20. void quickSort(int *arr,int low,int high) {
    21. if (low<high) {//子表元素个数大于一个,进行快速排序
    22. int pivotPos = partition(arr,low,high);//快速排序一次并获取存放枢纽的最终位置,用于划分子表
    23. quickSort(arr,low,pivotPos-1);//左子表
    24. quickSort(arr,pivotPos+1,high);//右子表
    25. }
    26. }
    27. int main() {
    28. int arr[] = { 5,3,4,10,6,11,12 };
    29. quickSort(arr,0,6);
    30. return 0;
    31. }