数据结构——基数排序
来源:互联网 发布:linux 覆盖复制 编辑:程序博客网 时间:2024/05/21 15:01
简介
基数排序和其他一般的排序算法不同,一般的排序算法主要是通过关键字之间的比较和移动记录这两种操作,而实现基数排序则不需要进行记录关键字间的比较。
基数排序是一种借助多关键字排序的思想,对单逻辑关键字进行排序的方法。
代码实现
/*基数排序算法思想假设我有数据11 23 45 29 31 67 59 32假设我拥有10个桶,编号分别为0-9一开始,我将个位数相应的数据都放入桶当中01 11 312 323 234 5 456 7 6789 29 59之后,将数据依次拿出来得到数组11 31 32 23 45 67 29 59之后,我将十位数相应的数据放入桶当中0 1112 23 293 31 324 455 596 67789然后将数据拿出来,得11 23 29 31 32 45 58 67 排序完成实现原理则是我们可以将所有数的数位补齐使所有数的数位都相同(数位不足的补0)然后,按照数位进行排序,直到所有数位都排序完成之后,排序结束因此,此算法的时间复杂度为O (d(n+rd)),其中d为所采取的基数,因此基数排序适合d很小但n很大的数据*/void radixSoft(int *arr, int length) { int bit = findMaxBit(arr, length); //数组的最大为位数 int *temp = new int[length]; //临时记录的数组 int *count = new int[10]; //计数器 int radix = 1;//基数 int k; for (int i = 0; i < bit; i++) { //清空计数器 for (int j = 0; j < 10; j++) { count[j] = 0; } //记录在每个桶当中的数据的个数 for (int j = 0; j < length; j++) { k = (arr[j] / radix) % 10; count[k]++; } //为数组temp分配空间 for (int j = 1; j < 10; j++) { count[j] = count[j - 1] + count[j]; } //将数据依次加入到桶当中 //之所以是倒着插入,是因为,当radix大于10之后,之前的排序已经是按照个位数排好了 //而count[k]当中分配的内存空间是从后往前开始插入的,因此,插入到当前桶的数据也 //必须是从后开始插入才能不打乱之前所进行排序所得出的结果 for (int j = length-1; j >= 0; j--) { k = (arr[j] / radix) % 10; temp[count[k] - 1] = arr[j]; count[k]--; } //将桶中的数据依次放回数组当中 for (int j = 0; j < length; j++) { arr[j] = temp[j]; } //下一波桶 radix *= 10; } delete[] temp; delete[] count;}int findMaxBit(int *arr, int length) { int bit = 1; //记录最大位数 int number = 10; //遍历数组 for (int i = 0; i < length; i++) { //找出最大的位数 while (arr[i] >= number) { number *= 10; bit++; } } return bit;}
阅读全文
0 0
- 数据结构——基数排序
- 数据结构——链式基数排序
- 数据结构例程——基数排序
- 【数据结构与算法】——基数排序
- 数据结构实践—— 英文单词的基数排序
- 【数据结构与算法】——基数排序
- 重学数据结构002——桶排序、基数排序
- 数据结构-基数排序
- 排序——基数排序
- 排序——基数排序
- 基数排序——java
- 排序——基数排序
- 内部排序—基数排序
- 数据结构与算法——线性时间排序(计数排序、基数排序、桶排序)
- 数据结构 排序 基数排序
- 基数排序 C语言数据结构
- 数据结构-算法: 基数排序
- 【数据结构】基数排序的哈希表
- POJ 3320 Jessica's Reading Problem
- 通过Oracle sql developer从sqlserver迁移数据到oracle(方便查找)
- 线程池的使用
- [bigdata-079] centos创建用户和创建用户组
- 如何在cmd中解决包含空格的命令处理路径
- 数据结构——基数排序
- 10个最好用的在线编译工具
- ubuntu修改root密码。
- 使用Oracle Sql Developer将SQL SERVER 2008数据库移植到Oracle 11g
- JSP乱码问题解决
- 09:膨胀的木棍
- 函数的祖先
- quartz作业监听
- 【OpenCV】检测人脸、眼睛、鼻子、耳朵、嘴