#include<iostream>
using namespace std;
typedef int ElemType;
/*
快速排序:基于分治算法
因为是运用了递归,其空间复杂度,最好为O(logn),最差为O(n)
平均为O(logn);
时间复杂度,最好为O(nlogn),最差为O(n^2),平均为O(nlogn)
是所有内排序算法中平均性能最优的算法;
每趟排序都能确定一个位置是最终结果的固定
*/
int Partition(ElemType A[],int low,int high){ //一趟划分
ElemType pivot = A[low]; //将当前表中的第一个元素设为枢轴,对表进行划分
while(low < high){ //循环跳出条件
while(low < high && A[high] >= pivot){
high--; //从high开始找,直到low=high或者找到比枢轴小的元素
}
A[low] = A[high]; //将high处比枢轴小的元素移动到low处
while(low <high && A[low] <= pivot){
low++; //从low开始找,直到low=high或者找到比枢轴大的元素
}
A[high] = A[low]; //将low比枢轴小的元素移动到high处
}
A[low] = pivot; //枢轴元素存放到最后low与high相等的位置
return low; //返回存放枢轴的最终位置
}
void QuickSort(ElemType A[],int low,int high){
if(low < high){ //跳出递归的条件
//Partition()就是划分操作。将表A[low……high]划分为满足条件的两个子表
int pivotpos = Partition(A,low,high); //划分
QuickSort(A,low,pivotpos-1); //依次递归
QuickSort(A,pivotpos+1,high); //依次递归
}
}
int main(){
ElemType A[] = {4,5,2,3,8,7,9,1,21};//因为9个数
QuickSort(A,0,8);//low最开始为坐标0,high最开始为最大坐标8
for(int i = 0;i<9;i++){
cout<<A[i]<<" ";
}
return 0;
}