#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
/*时间复杂度是O(n*递归层数) O(n*logn)
空间复杂度是O(递归层数)*/
int Partition(int a[],int low,int high) {
int pivot = a[low];//第一个元素作为枢轴
while (low < high) {//low 和 high作为数轴最终位置
while (low<high && a[high]>=pivot) { //high指向位置数据大于pivot就直接移动 因为我们是升序,大数据在右侧
high--;
}
a[low] = a[high];//找到high指向位置数据小于pivot枢轴位置 将数值给到low指向
while (low<high && a[low]<pivot) {//low指向位置数据小于pivot直接移动,小数据在左侧
low++;
}
a[high] = a[low];//比枢轴大赋值给high空位置
}
a[low] = pivot;//将枢轴放到“中间”位置
return low;//返回low指向位置 最终low和high指向同一位置所以二者都可以 所以在后面递归的时候 要进行加1剪1 获得下一递归的low / high
}
void QuickSort(int a[],int low,int high) {
if (low < high) {
int pivotops = Partition(a, low, high);
QuickSort(a,low,pivotops-1);
QuickSort(a,pivotops+1,high);
}
}
int main() {
int d[] = { 49,38,65,97,76,13,27,49 };
int n = 8;
QuickSort(d,0,n-1);
for (int i = 0; i < n; i++) {
printf("%d ", d[i]);
}
return 0;
}
标签:include,int,QuickSort,high,while,low,pivot,排序,快速
From: https://blog.csdn.net/weixin_62858623/article/details/141360889