#include<stdio.h>
#include<malloc.h>
#include<iostream>
using namespace std;
/*
快速排序十分重要,要能迅速默写出来。
*/
/// @brief Partition函数,将数组一分为二,左边小于pivot,右边大于pivot。
/// 故每一次调用该函数,pivot就确定最终位置。这个函数默认最左边为pivot。
/// @param a 数组
/// @param L 最左边下标
/// @param R 最右边下标
/// @return pivot的下标
int Partition(int a[],int L,int R){
int pivot=a[L]; //默认以第一个为pivot
while(L<R){
while(a[R]>=pivot && L<R) R--;
a[L]=a[R];
while(a[L]<=pivot && L<R) L++;
a[R]=a[L];
}
a[L]=pivot; //这句不要忘了
return L;
}
/// @brief 递归调用QuickSort函数完成快排。平均时间复杂度O(nlogn)
/// @param a 数组
/// @param L 最左边下标
/// @param R 最右边下标
void QuickSort(int a[],int L,int R){
if(L<R){//这个判断必须不要忘了
int index=Partition(a,L,R);//核心函数,确定一个位置
QuickSort(a,L,index-1);//数组左边快排
QuickSort(a,index+1,R);//数组右边快排
}
}
/// @brief 主函数测试用
/// @return 无返回
int main(){
int n;
cout<<"请输入数组长度:";
cin>>n;
int a[n];
cout<<"请输入数组元素:";
for(int i=0;i<n;i++){
cin>>a[i];
}
QuickSort(a,0,n-1);
cout<<"快速排序后结果为:";
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
}
数据结构-快速排序
最新推荐文章于 2024-09-30 13:21:56 发布