排序算法之基数排序

基数排序就是按位数排序,最大数有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;
}

如有错误,感谢指正!

原文地址:https://www.cnblogs.com/Luweir/p/14147431.html