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
    
    
    //利用链表的存储结构
    
    //从按照个位排序开始  个位相同的属于一个链表
    //再拿出来  实现排序
  • 相关阅读:
    在SQL2000怎樣用動態實現SQL2005的nvarchar(max)功能
    行列互换
    c#+GUI在aspx页面画图
    做网站用UTF8还是GB2312?
    Mvc如何做权限
    表白网
    vs2008保存很慢,提速
    MVC 向View传值
    aspx画图表
    什么是MVC
  • 原文地址:https://www.cnblogs.com/libin123/p/10420144.html
Copyright © 2011-2022 走看看