大数排序
描述
小鲁虽然编程能力很一般,但是嘴皮子上不服输。他很喜欢拿自己不懂的问题考小华。
刚学会冒泡排序的他,决定挑战一下小华的智商:
给定你一个长度为n的整数数列。
请你对这个数列按照从小到大进行排序。
并将排好序的数列按顺序输出。
小鲁刻意隐瞒了数据的规模,你觉得小华能够搞定吗?
偷偷告诉你:1≤n≤100000,所有整数均在1--10^9范围内
后记:小华使用快速排序秒过,小鲁惨败,因为他看不懂小华的代码......
输入
输入共两行,第一行包含整数 n。
第二行包含 n 个整数,表示整个数列。
输出
输出共一行,包含 n 个整数,表示排好序的数列。
输入样例 1
12 111584322 907287398 13562672 615771042 83035480 323016588 501254568 158361642 388135644 58329696 400904710 38908140
输出样例 1
13562672 38908140 58329696 83035480 111584322 158361642 323016588 388135644 400904710 501254568 615771042 907287398
今天看了下快速排序,就先用比较复杂的办法写下吧,后面掌握熟练了再优化下吧。
#include <stdio.h>
#include <stdlib.h>
int quick_sort( int *a,int n)
{
if(n<2) return 0;
int left=0,right=n-1;
int Pivot=a[0];
int moving=2;
while(left<right)
{
if(moving==2)
{
if(Pivot<a[right])
{
right--;
continue;
}
else
{
a[left]=a[right];
left++;
moving=1;
continue;
}
}
if(moving==1)
{
if(Pivot>a[left])
{
left++;
continue;
}
else
{
a[right]=a[left];
right--;
moving=2;
continue;
}
}
}
a[left]=Pivot;
quick_sort(a,left);
quick_sort(a+left+1,n-1-left);
}
int main()
{
int a[100000],n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
quick_sort(a,n);
for(int j=0;j<n;j++)
printf("%d ",a[j]);
return 0;
}