http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=3398
数据结构实验之排序一:一趟快排
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给定N个长整型范围内的整数,要求输出以给定数据中第一个数为枢轴进行一趟快速排序之后的结果。
输入
连续输入多组数据,每组输入数据第一行给出正整数N(N < = 10^5),随后给出N个长整型范围内的整数,数字间以空格分隔。
输出
输出一趟快速排序后的结果,数字间以一个空格间隔,行末不得有多余空格。
示例输入
8
49 38 65 97 76 13 27 49
示例输出
27 38 13 49 76 97 65 49
既然题目叫一趟快排,就从书上抄一趟快排吧,注意,这里是说只快排一次,并不是用一趟快排排完。
#include<stdio.h>
#include<stdlib.h>
int ksort(int a[],int low,int high)
{
int key=a[low];
int t;
while(low<high)
{
while(low<high&&a[high]>=key) --high;
{
t=a[low];
a[low]=a[high];
a[high]=t;
}
while(low<high&&a[low]<=key) ++low;
{
t=a[low];
a[low]=a[high];
a[high]=t;
}
}
return low;
}
int main()
{
int a[100000],i,n;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
ksort(a,0,n-1);
for(i=0;i<n-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[n-1]);
}
return 0;
}