代码实现:
#include<iostream>//万能头文件编译时间太长//
using namespace std;
void QS(int *array,int low,int high){ //快排
if(low>=high){ //若待排序序列只有一个元素,返回空
return ;
}
int i=low; //i作为指针从左向右扫描
int j=high; //j作为指针从右向左扫描
int key=array[low];//第一个数作为基准数
while(i<j){
while(array[j]>=key&&i<j){ //从右边找小于基准数的元素 (此处由于j值可能会变,所以仍需判断i是否小于j)
j--; //找不到则j减一
}
array[i]=array[j]; //找到则赋值
while(array[i]<=key&&i<j){ //从左边找大于基准数的元素
i++; //找不到则i加一
}
array[j]=array[i]; //找到则赋值
}
array[i]=key; //当i和j相遇,将基准元素赋值到指针i处
QS(array,low,i-1); //i左边的序列继续递归调用快排
QS(array,i+1,high); //i右边的序列继续递归调用快排
}
int main(){
int a[51];
int n;
cout<<"数列长度:";
cin>>n;
cout<<"原始序列:";
for(int i=1;i<=n;i++) cin>>a[i];
int length=n;
QS(a,0,length);
cout<<"快排序列:";
for(int i=1;i<=length;i++){
cout<<a[i]<<" ";
}
return 0;
}