资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9
代码段
#include <iostream>
using namespace std;
void QuickSort(int a[],int left,int right){
if(left<right){
int i=left,j=right;
int base=a[left]; //基准
/*注意:如果基准不是选第一个数,
可以用Swap()函数将基准调整至第一个位置,再执行QSort()程序。*/
while(i<j){
while(i<j&&a[j]>=base) //从右往左找小于base的元素
j--;
if(i<j)
a[i++]=a[j];
while(i<j&&a[i]<base) //从左往右找大于base的值
i++;
if(i<j)
a[j--]=a[i];
}
a[i]=base; //将基准base填入最后的坑中
QuickSort(a,left,i-1); //递归调用,分治
QuickSort(a,i+1,right);
}
}
int main()
{
int num;
cin>>num;
/*动态开辟大小为N的数组 C的写法*/
//arr = (int*)malloc(sizeof(int) * N);
arr = new int[num]; //c++中按照输入数字, 动态申请数组
for(int i=0; i<num; i++)
cin>>arr[i];
QuickSort(arr,0,num-1);
for(int i=0; i<num; i++)
cout<<arr[i]<<" ";
return 0;
}