• 排序算法之基数排序


    基数排序就是按位数排序,最大数有n位就要进行n次入桶出桶;
    原理如下:应该都懂
    在这里插入图片描述
    C++代码附上:看了几个代码,觉得还是自己写一下比较容易理解;

    #include<iostream>
    #include<vector>
    #include<cmath>
    #define max_length 100
    using namespace std;
    
    int a[max_length]={0};
    int length;//数组长度
    int maxD(int a[],int n)//得到数组中最大数的位数
    {
        int max=a[0];
        for(int i=0;i<n;i++)
        {
            if(a[i]>max) max=a[i];
        }
        int d=0;
        while(max)
        {
            max/=10;
            d++;
        }
        return d;
    }
    
    void sort(int a[],int now_d)//now_d=当前位数
    {
        int factor=pow(10,now_d-1);
        vector<int> bucket[10];    //初始化十个桶
        for(int i=0;i<length;i++)
        {
            int temp=(a[i]/factor)%10;//得到a[i]的now_d位数,并放入对应桶中
            bucket[temp].push_back(a[i]);
        }
        int j=0;
        for(int i=0;i<10;i++)//遍历十个桶,按从小到大顺序放入原数组
        {
            int size=bucket[i].size();
            for(int k=0;k<size;k++)
            {
                a[j++]=bucket[i][k];
            }
            bucket[i].clear();//桶置空
        }
        //test point
        // for(int i=0;i<length;i++)
        //     cout<<a[i]<<' ';
        // cout<<endl;
    }
    
    void basesort(int a[],int d)//d=最大数位数
    {
        int i=1;
        for(;i<=d;i++)//从个位数排到d位数
        {
            sort(a,i);
        }
    }
    
    int main()
    {
        cin>>length;
        for(int i=0;i<length;i++)
        {
            cin>>a[i];
        };
        basesort(a,maxD(a,length));
        for(int i=0;i<length;i++)//输出
            cout<<a[i]<<' ';
        return 0;
    }
    

    如有错误,感谢指正!

  • 相关阅读:
    软件补丁问题(网络流24题)
    飞行员配对方案问题(网络流24题)
    [NOIp普及组2011]瑞士轮
    如何在Linux上安装QQ
    [洛谷P2420] 让我们异或吧
    高斯消元
    [SCOI2014]方伯伯的OJ
    [USACO1.3]虫洞
    KMP算法讲解
    [洛谷P1382] 楼房
  • 原文地址:https://www.cnblogs.com/Luweir/p/14147431.html
Copyright © 2020-2023  润新知