Think:
快排就是对冒泡排序的一种优化,分割 递归 比较 排序
Problem Description
给定N(N≤10^5)个整数,要求用快速排序对数据进行升序排列,注意不得使用STL。
Input
连续输入多组数据,每组输入数据第一行给出正整数N(≤10^5),随后给出N个整数,数字间以空格分隔。
Output
输出排序后的结果,数字间以一个空格间隔,行末不得有多余空格。
Example Input
8
49 38 65 97 76 13 27 49
Example Output
13 27 38 49 49 65 76 97
#include<stdio.h>
void sort(int a[],int L, int R);
int main()
{
int n, a[100050], t;
while(scanf("%d",&n)!=EOF)
{
for (t = 0;t <= n - 1;t ++)
{
scanf("%d",&a[t]);
}
sort(a, 0, n - 1);
for (t = 0;t <= n - 1;t ++)
{
if (t == n - 1)
printf("%d\n",a[t]);
else
printf("%d ",a[t]);
}
}
return 0;
}
void sort(int a[],int L, int R)
{
int x = a[L], i = L, j = R;
if (L >= R) return ;
while(i < j)
{
while(i < j&&a[j] >= x) j --;
a[i] = a[j];
while(i < j&&a[i] <= x) i ++;
a[j] = a[i];
}
a[i] = x;
sort(a, L, i - 1);
sort(a, i + 1, R);
}
/***************************************************
User name:
Result: Accepted
Take time: 0ms
Take Memory: 108KB
Submit time: 2017-02-22 11:17:21
****************************************************/