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

数据结构|基数排序及八个排序总结

一、基数排序

基数排序是一种非比较型整数排序算法,也称桶排序,它的基本思想是通过对数据的每一位进行排序,低位优先从最低位到最高位依次进行进桶出桶操作,循环count次(count为最大值的位数),最终实现整个数据序列的有序排列。

桶排序不能处理负数。

1.算法思想

算法原理

  • 基数排序是基于桶排序的思想,将整数按位数切割成不同的数字,然后按每个位数分别进行排序。
  • 对于每个位数,使用稳定的排序算法(如计数排序)将元素分配到不同的桶中,然后再按顺序收集桶中的元素。
  • 从最低位开始,依次对每一位进行上述操作,直到最高位处理完毕,此时整个序列就有序了。

进桶:

出桶:

以此类推。 

十位:

百位:

2.代码实现

//基数排序static int GetFigur(int* arr, int len)
{int max = arr[0];for (int i = 0; i < len; i++){if (max < arr[i]){max = arr[i];}}//求位数//丢个位int count = 0;while (max != 0){count++;max /= 10;}return count;
}
//获取十进制整数右数第figur位的数,figur从0开始
static int GetNum(int n, int figur)
{for (int i = 0; i > figur; i++){n /= 10;}return n % 10;
}void RadixSort(int* arr, int len)
{//定义10个队列HNode queArr[10];for (int i = 0; i < 10; i++){InitQueue(&queArr[i]);}//得到最大数字的位数,确定进队和出队的趟数int count = GetFigur(arr, len);int index;//队列的下标for (int i = 0; i < count; i++){//入队for (int j = 0; j < len; j++)//遍历数组入队{index = GetNum(arr[j], i);//index保存arr[j]进入队列的下标Push(&queArr[index], arr[j]);}//依次出队int j = 0;//arr的下标for (int k = 0; k < 10; k++){while(!IsEmpty(&queArr[k]))	{Pop(&queArr[k], &arr[j++]);}}}for (int i = 0; i < 10; i++){Destroy(&queArr[i]);}
}

3.复杂度分析

时间复杂度:O(d*n) d为最大数据的位数

空间复杂度:桶排序需要额外的空间来存储桶和桶内元素,空间复杂度为O(n)。
稳定性:桶排序是稳定的排序算法。在桶排序过程中,每个桶内的元素在排序时会保持相对顺序不变。例如,对于相同大小的元素,先进入桶的元素会先被处理,从而保证了它们在排序后的相对顺序与原始序列一致。

二、八大排序总结

http://www.xdnf.cn/news/14221.html

相关文章:

  • Python爬虫入门
  • 使用veaury,在vue项目中运行react组件
  • 汉诺塔专题:P1760 通天之汉诺塔 题解 + Problem D: 汉诺塔 题解
  • AI写程序: 多线程网络扫描网段ip工具
  • STM32使用rand()生成随机数并显示波形
  • 【最后203篇系列】028 FastAPI的后台任务处理
  • JVM之经典垃圾回收器
  • C++数据结构与二叉树详解
  • Kubernetes》》k8s》》Namespace
  • ProfibusDP转ModbusRTU网关,流量计接入新方案!
  • React 中如何获取 DOM:用 useRef 操作非受控组件
  • 珈和科技:无人机技术赋能智慧农业,精准施肥与病虫害监控全面升级
  • Perf学习
  • 使用最新threejs复刻经典贪吃蛇游戏的3D版,附完整源码
  • Spring Boot配置文件优先级全解析:如何优雅覆盖默认配置?
  • 盲超分-双循环对比学习退化网络(蒸馏)
  • Cursor 生成java测试用例
  • k8s低版本1.15安装prometheus+grafana进行Spring boot数据采集
  • npx 的作用以及延伸知识(.bin目录,npm run xx 执行)
  • AI 推理框架详解,包含如COT、ReAct、LLM+P等的详细说明和分类整理,涵盖其原理、应用场景及对比分析
  • Linux 线程互斥
  • Power BI 中 EXCEPT() 函数的使用指南
  • 悟空CRM系统部署+迁移
  • Vue.directive自定义v-指令
  • 【AI部署】腾讯云GPU-常见故障—SadTalker的AI数字人视频—未来之窗超算中心 tb-lightly
  • JAVA中多线程的经典案例
  • 4.黑马学习笔记-SpringMVC(P43-P47)
  • 学习设计模式《一》——简单工厂
  • 算法驱动光场革命:SLM技术引领智能光学新时代
  • 用 NLP + Streamlit,把问卷变成能说话的反馈