题目描述
利用快速排序算法将读入的N个数从小到大排序后输出。
快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++选手请不要试图使用STL,虽然你可以使用sort一遍过,但是你并没有掌握快速排序算法的精髓。)
输入输出格式
输入格式:
输入的第1行为一个正整数N,第2行包含N个空格隔开的正整数a[i],为你需要进行排序的数,数据保证了A[i]不超过1000000000。
输出格式:
将给定的N个数从小到大输出,数之间空格隔开,行末换行且无空格。
输入输出样例
输入样例#1:
5
4 2 4 5 1
输出样例#1:
1 2 4 4 5
————————————————
思路:快速排序算法模板
void quick_sort(int q[], int l, int r)
{
if (l >= r) return;
int i = l - 1, j = r + 1, x = q[l + r >> 1];
while (i < j)
{
do i ++ ; while (q[i] < x);
do j -- ; while (q[j] > x);
if (i < j) swap(q[i], q[j]);
}
quick_sort(q, l, j), quick_sort(q, j + 1, r);
}
========================
#include <stdio.h>
int a[100000+100];
void quicksort(int left,int right){
int i=left,j=right,t;
int mid=a[(left+right)/2];
while(i<=j){
while(a[i]<mid)
i++;
while(a[j]>mid)
j--;
if(i<=j){
t=a[i];
a[i]=a[j];
a[j]=t;
i++;
j--;
}
}
if(i < right)
quicksort(i,right);
if(left < j)
quicksort(left,j);
}
int main(){
int n;
int i;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
quicksort(0,n-1);
printf("%d",a[0]);
for(i=1;i<n;i++)
printf(" %d",a[i]);
printf("\n");
return 0;
}