当前位置: 首页 > news >正文

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


//利用链表的存储结构

//从按照个位排序开始  个位相同的属于一个链表
//再拿出来  实现排序

 

转载于:https://www.cnblogs.com/libin123/p/10420144.html

相关文章:

  • KindEditor 上传漏洞致近百个党政机关网站遭植入
  • MariaDB重置密码
  • 【ActiveMQ】- 发布/订阅模式
  • 效能改进之项目例会导入实践
  • iOS | NSProxy
  • Java I/O输入输出流
  • conda常用的命令
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 零代码玩转数据可视化
  • Dubbo 安装ZooKeeper环境
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • 程序猿福利来啦,神目AI开放平台免费送人脸识别SDK啦
  • java异常
  • Go test 命令行参数
  • 观察者模式与发布/订阅模式学习
  • 时间复杂度分析经典问题——最大子序列和
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【面试系列】之二:关于js原型
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Centos6.8 使用rpm安装mysql5.7
  • CSS实用技巧干货
  • Java到底能干嘛?
  • js算法-归并排序(merge_sort)
  • mac修复ab及siege安装
  • Median of Two Sorted Arrays
  • MQ框架的比较
  • Object.assign方法不能实现深复制
  • Spark学习笔记之相关记录
  • 构建二叉树进行数值数组的去重及优化
  • 模型微调
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 云大使推广中的常见热门问题
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #define 用法
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (¥1011)-(一千零一拾一元整)输出
  • (1)(1.11) SiK Radio v2(一)
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (42)STM32——LCD显示屏实验笔记
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (层次遍历)104. 二叉树的最大深度
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (全注解开发)学习Spring-MVC的第三天
  • (三)uboot源码分析
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • .cn根服务器被攻击之后
  • .NET Core 项目指定SDK版本
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET委托:一个关于C#的睡前故事
  • .Net小白的大学四年,内含面经
  • .NET序列化 serializable,反序列化
  • @EnableWebMvc介绍和使用详细demo