51Nod-1018-排序

给出N个整数,对着N个整数进行排序
Input
第1行:整数的数量N(1 <= N <= 50000)
第2 - N + 1行:待排序的整数(-10^9 <= A[i] <= 10^9)
Output
共n行,按照递增序输出排序好的数据。
Input示例
5
5
4
3
2
1
Output示例
1
2
3
4
5

根据本题的数据范围,我们可以知道需要用到快排方可。

代码如下(C):

#include <stdio.h>
#define _MAX 50001

void swap(long *A, int low, int high)
{
    if (low == high)
    {
        return ;
    }
    A[low] ^= A[high];
    A[high] ^= A[low];
    A[low] ^= A[high];
    return ;
}

int Partition(long *A, int low, int high)
{
    long pivotkey = A[low];
    while (low < high)
    {
        while (low < high && A[high] >= pivotkey)
        {
            high--;
        }
        swap(A, low, high);
        while (low < high && A[low] <= pivotkey)
        {
            low++;
        }
        swap(A, low, high);
    }
    return low;
}

void QSort(long *A, int low, int high)
{
    int pivot;
    if (low < high)
    {
        pivot = Partition(A, low, high);
        QSort(A, low, pivot - 1);
        QSort(A, pivot + 1, high);
    }
}

void sort(long *A, int N)
{
    QSort(A, 1, N);
}

int main(int argc, const char * argv[])
{
    int N, i = 1;
    long A[_MAX];
    scanf("%d", &N);
    for (; i <= N; i++)
    {
        scanf("%ld", &A[i]);
    }

    sort(A, N);

    for (i = 1; i <= N; i++)
    {
        printf("%ld\n", A[i]);
    }
    return 0;
}

这里着重要强调,调换位置的方法抽离为swap函数时,如果使用的是按位异或(^),则要着重考虑一下low和high想等的情况,相等时直接返回空。
也就这样了,别的没啥强调的了。OVER!!!

全部评论

相关推荐

11-27 17:08
已编辑
牛客_产品运营部_私域运营
腾讯 普通offer 24k~26k * 15,年包在36w~39w左右。
点赞 评论 收藏
分享
10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
10-17 17:14
门头沟学院 C++
牛客410039819号:北京地区大多是919和927,这两场挂太多人了
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务