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