厦大ACM入门百练

大数排序

描述

小鲁虽然编程能力很一般,但是嘴皮子上不服输。他很喜欢拿自己不懂的问题考小华。

刚学会冒泡排序的他,决定挑战一下小华的智商:

给定你一个长度为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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值