题目描述:
给定你一个长度为 n 的整数数列,请你使用快速排序对这个数列按照从小到大进行排序,并将排好序的数列按顺序输出。
输入格式:
输入共两行,第一行包含整数 n。
第二行包含 n 个整数(所有整数均在1∼99 范围内),表示整个数列。
输出格式:
输出共一行,包含 n 个整数,表示排好序的数列。
例子:
5
10 9 8 7 6
输出样例:
6 7 8 9 10
#include<cstdio>
#include<cmath>
int swap(int &a,int &b);//定义了一个互换函数。
int quicksort(int s[],int l,int r);//快速排序法。
int main()
{
int i,a[100],n;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
quicksort(a,0,n-1);
for(i=0;i<n;i++){
printf("%d ",a[i]);
}
return 0;
}
int swap(int &a,int &b){
int t;
t=a;
a=b;
b=t;
}
int quicksort(int s[],int l,int r){//数组,数组最左边序号,数组最右边序号。
int w,k,set;//set定义为比较的一个基准。
if(l>=r){
return 0;
}
else
{
w=l;k=r;//数组最左边序号赋值给w,数组最右边序号赋值给k。
set=s[w];//基准为s[w]。
while(w!=k){
while(w<k&&set<=s[k]){
k--;
}
swap(s[k],s[w]);
while(w<k&&set>=s[w]){
w++;
}
swap(s[w],s[k]);
}
quicksort(s,l,w-1);//递归二分发类似。
quicksort(s,w+1,r);
}
}