zoukankan      html  css  js  c++  java
  • 基數排序

    基數排序是一個複雜度突破了O(nlogn)的排序算法

    優點:快

    缺點:需要額外空間一倍,只是用與整數

    原理:一次按照數據的最低位,次底位……最高位進行排序,利用桶子來進行。

    見代碼:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=2e5;
    
    inline int getdigit(int *v,int n)//獲取數據中最大的位數
    {
        int d=1,bas=10;
        for(int i=0;i<n;++i)
        {
            while(v[i]>=bas)
            {
                ++d;
                bas*=10;
            }
        }
        return d;
    }
    
    void LSD(int *v,int n)
    {
        int bas=1;
        int d=getdigit(v,n);
        int *temp=new int[n];//臨時數組
        while(d--)
        {
            int cnt[10]={0};
            int id;
            for(int i=0;i<n;++i)//求出每個桶的大小
            {
                 id=v[i]/bas%10;
                 cnt[id]++;
            }
            int st[10]={0};//
            for(int i=1;i<10;++i)//在臨時數組上分配位置
                st[i]=st[i-1]+cnt[i-1];
                
            for(int i=0;i<n;++i)//把數據按照桶子的記錄,搬到臨時數組
            {
                id=v[i]/bas%10;
                temp[st[id]++]=v[i];
            }
            memcpy(v,temp,n*sizeof(int));//搬回原數組
            bas*=10;
        }
        delete [] temp;
    }
    
    
    int main()
    {
        int a[10];
        srand(time(0));
        for(int i=0;i<10;++i)
            a[i]=rand()%20+1;
        for(int &x:a)
            cout<<x<<" ";
        cout<<endl;
        LSD(a,10);
        for(int &x:a)
            cout<<x<<" ";
        cout<<endl;
    }
    
    
                     
  • 相关阅读:
    Express 框架中 使用ejs
    Nodejs操作MongoDB数据库
    MongoDB基础操作
    node中的包、npm和模块
    background
    animation
    transition
    transform
    【SpringCloud】各种组件的更新情况
    【SpringCloud】版本选择
  • 原文地址:https://www.cnblogs.com/Lin88/p/10073736.html
Copyright © 2011-2022 走看看