1003.快速排序
时限:1000ms 内存限制:10000K 总时限:3000ms
描述
给定一个数列,用快速排序算法把它排成升序。
输入
第一行是一个整数n(n不大于10000),表示要排序的数的个数;下面一行是用空格隔开的n个整数。
输出
输出排序后的数列,每个数字占一行。
输入样例
5
3 2 1 4 5
3 2 1 4 5
输出样例
1
2
3
4
2
3
4
5
(代码应该是对的,不知道怎么提交)
#include<stdio.h>
int a[100],n;
int QKPass(int left,int right)//一趟快速排序
{
int i,j,t;
if(left>right)return 0;
t=a[left];//基准记录
i=left;j=right;
while(i<j)
{
while(a[j]>=t&&i<j)
j--;
if(i<j){a[i]=a[j];i++;}
while(a[i]<=t&&i<j)
i++;
if(i<j){a[j]=a[i];j--;}
}
a[i]=t;//将基准记录保存到i=j的位置
return i;//返回基准记录的位置
}
void QKSort(int i,int j)
{
int temp;
if(i<j)
{
temp=QKPass(i,j);
QKSort(i,temp-1);
QKSort(temp+1,j);
}
}
int main()
{
int i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
QKSort(0,n-1);
for(i=0;i<n;i++)
{
printf("%d\n",a[i]);
}
return 0;
}