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

    测评传送门

    真正意义上学会快排,以前一直调的sort…… 但毕竟能手写就手写,对自己也是一种锻炼

    解析:

    快排说白了就是把要排的一行数切成一半,记录下中间值,在左半部分找到比中间值大的(记d1),再在右半部分找到比中间值小的(记d2)

    如果d1在d2的左边,就交换他们,d1后推一格,d2前推一格,继续快排

    #include<stdio.h>
    using namespace std;
    int a[100001];
    
    void fast(int l,int r)
    {
        int i,j,mid,p;
        i=l,j=r;    
        mid=a[(l+r)>>1];
        do
        {
            while(a[i]<mid) i++;
            while(a[j]>mid) j--;
            if(i<=j)
            {
                p=a[i];
                a[i]=a[j];
                a[j]=p;
                i++,j--;
            }
        }while(i<=j);
        if(l<j) fast(l,j);
        if(i<r) fast(i,r);
    }
    
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;++i){
            scanf("%d",&a[i]);
        }
        fast(1,n);
        for(int i=1;i<=n;++i){
            printf("%d ",a[i]);
        }
        return 0;
    }
    从0到1很难,但从1到100很容易
  • 相关阅读:
    eclipse建立工作集管理项目
    echarts-x
    GeoJSON
    mysql 5.7 root password 过期
    kubernetes centos7
    JestClient
    树莓派镜像制作
    docker run elasticsearch
    vm.max_map_count
    远程访问jupyter notebook
  • 原文地址:https://www.cnblogs.com/qseer/p/9419862.html
Copyright © 2011-2022 走看看