题目描述:
用递归来实现快速排序(quick sort)算法。快速排序算法的基本思路是:假设要对一个数组a进行排序,且a[0] = x。首先对数组中的元素进行调整,使x放在正确的位置上。同时,所有比x小的数都位于它的左边,所有比x大的数都位于它的右边。然后对于左、右两段区域,递归地调用快速排序算法来进行排序。
输入:
输入只有一行,包括若干个整数(不超过10个),以0结尾。
输出:
输出只有一行,即排序以后的结果(不包括末尾的0。
样例输入:
5 2 6 1 7 3 4 0
样例输出:
1 2 3 4 5 6 7
参考代码:
#include<bits/stdc++.h>
using namespace std;
int a[15];
//用第一个元素将待排序序列划分为左右两个部分https://www.dotcpp.com/oj/problemset.html
int Partition(int A[],int low,int high){
int pivot=A[low];//第一个元素作为枢轴
while(low<high){ //用low、high搜索枢轴的最终位置
while(low<high&&A[high]>=pivot) --high;
A[low]=A[high]; //比枢轴小的元素移动到左端
while(low<high&&A[low]<=pivot) ++low;
A[high]=A[low]; //比枢轴大的元素移动到右端
}
A[low]=pivot;
return low;
}
//快速排序
void QuickSort(int A[],int low,int high){
if(low<high){//递归跳出条件
int pivotpos=Partition(A,low,high); //划分
QuickSort(A,low,pivotpos-1);//划分左子表
QuickSort(A,pivotpos+1,high); //划分右子表
}
}
int main(){
int len;
for(int i=0;i<11;i++){
scanf("%d",&a[i]);
if(a[i]==0)
break;
}
len = sizeof(a)/sizeof(int);
QuickSort(a,0,len-2);
for(int i=0;i<len-1;i++){
if(a[i]!=0){
printf("%d",a[i]);
printf(" ");
}
}
return 0;
}