zoukankan      html  css  js  c++  java
  • P1177 【模板】快速排序 题解

    利用快速排序算法将读入的NN个数从小到大排序后输出。

    快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++C++选手请不要试图使用STL,虽然你可以使用sort一遍过,但是你并没有掌握快速排序算法的精髓。)

    输入输出格式

    输入格式:

    11行为一个正整数NN,第22行包含NN个空格隔开的正整数a_iai,为你需要进行排序的数,数据保证了A_iAi不超过10000000001000000000。

    输出格式:

    将给定的NN个数从小到大输出,数之间空格隔开,行末换行且无空格。

    输入输出样例

    输入样例#1: 复制
    5
    4 2 4 5 1
    输出样例#1: 复制
    1 2 4 4 5

    说明

    对于20\%20%的数据,有N≤1000N1000;

    对于100\%100%的数据,有N≤100000N100000。

    这题用快排做,但我试了把mid=(l+r)>>2,答案是错的,

    而用mid=a[(l+r)] 却是对的。。。。。。

    哪位大佬知道 ,请告知  。。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    long long a[1000005];
    void js(int l,int r)
    {
    int mid=a[(l+r+1)>>1];  //位移运算,相当于除2
    int i=l,j=r;
    while(i<=j)
    {
    while(a[i]<mid) i++;
    while(a[j]>mid) j--;
    if(i<=j) {
    swap(a[i],a[j]);
    i++,j--;
    }
    }
    if(l<j) js(l,j);
    if(i<r) js(i,r);
    return ;
    }
    int main()
    {
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
    scanf("%d",&a[i]);
    }
    js(1,n);
    for(int i=1;i<=n;i++)
    printf("%d ",a[i]);
    return 0;
    }

    Try and fail,but don't fail to try; 失败是成功之母
  • 相关阅读:
    3.不同类型变量存取
    2.Scanner的应用
    helloworld
    针对搜狗网址导航评论
    第二阶段第三次站立会议
    第二阶段第二次站立会议
    软件工程概论学习进度条05
    人月神话阅读笔记02
    第二阶段第一次站立会议
    第八次站立会议
  • 原文地址:https://www.cnblogs.com/Youio-bolg/p/11234522.html
Copyright © 2011-2022 走看看