zoukankan      html  css  js  c++  java
  • C++基数排序

    #include<iostream>
    
    #include<list>
    using namespace std;
    
    int maxdigit(int data[],int n)//求所有数中最大的数是几位数
    {
    
    
    
        int d=1;
        int p=10;
        for(int i=0;i<n;i++)
        {
    
            while(data[i]>=p)
            {
                p*=10;
                ++d;
            }
        }
        return d;
    
    }
    
    void  radixsort(int data[],int n)//基数排序
    {
    
        int digits=maxdigit(data,n);
        list<int> lists[10];          //创建链表数组
        int d,j,k,factor;
        for(d=1,factor=1;d<=digits;d++,factor*=10)   //三轮循环 因为最大为百位  个十百
        {
            for(j=0;j<n;j++)       //将数组中的数按照个/十/百位放到对应的链表里
            {
                lists[(data[j]/factor)%10].push_back(data[j]);
    
            }
            for(j=k=0;j<10;j++)  //将链表里的数依次放到数组中
            {
                while(!lists[j].empty())
                {
                    data[k++]=lists[j].front();
                    lists[j].pop_front();
                }
            }                  //完成了按照个/十/百位的排序
        for(int i=0;i<9;i++)   //输出中间结果
            cout<<data[i]<<"->";
        cout<<data[9]<<endl;
        }
    
    }
    
    
    int main()
    {
        int data[10]={179,208,306,93,859,984,55,9,271,33};
        radixsort(data,10);
        for(int i=0;i<9;i++)
            cout<<data[i]<<"->";
        cout<<data[9]<<endl;
        //system("pause");
        return 0;
    }
    
    //效率比较高   但是需要多一倍的存储空间
    
    
    
    //拿最大的为百位的数来讲
    //先按个位的大小将所有数进行排序  个位相同的放在一起 为一堆/桶
    
    //再按十位的大小将所有数进行排序  十位相同的放在一起
    
    //最后按百位的大小将所有数进行排序  百位相同的放在一起  排序完即为正确的顺序
    
    //先从个位开始->十位->百位  叫做LSD 最低位优先
    //反之叫MSD
    
    
    //利用链表的存储结构
    
    //从按照个位排序开始  个位相同的属于一个链表
    //再拿出来  实现排序
  • 相关阅读:
    python学习笔记[3]-邮件的发送
    python学习笔记[2]-join 和 split
    python学习笔记[1]-凯撒密码
    tar 指令详解
    mysql主从数据库配置
    国产免费高性能桌面录屏软件LiveView1.0正式发布
    原来163的大容量异步上传是这么实现的
    C++ string warning C4251
    你不知道的代码规范---摘自《软件随想录》
    ffmpeg avcodec_decode_video2 解码失败
  • 原文地址:https://www.cnblogs.com/libin123/p/10420144.html
Copyright © 2011-2022 走看看