问题描述
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9
本题算法思想:用快速排序
#include<stdio.h>
int A[101];
void quickSort(int low,int high){
int temp;
int key;//基准数
if(low > high)
return ;
key = A[low];
int i = low;
int j = high;
while(i != j){
//当右边的数大于基数,向左移动
//先从右边,减少交换次数
while(A[j] >= key && i < j )
j -- ;
//当左边的数小于基数,向右移动
while(A[i] <= key && i < j)
i ++;
//交换两个数
if(i < j){
temp = A[i];
A[i] = A[j];
A[j] = temp;
}
}
//最后将基数归位
A[low] = A[i];
A[i] = key; //成功分为左右两部分
//递归
quickSort(low , i - 1);
quickSort(i + 1 , high);
}
int main(){
int i;
int n ;
scanf("%d",&n);
for(i = 1 ; i <= n ; i++){
scanf("%d",&A[i]);
}
quickSort(1, n);
for(i = 1 ; i <= n ; i++){
printf("%d ",A[i]);
}
return 0 ;
}