基数排序
来源:互联网 发布:汽车钥匙套真皮 淘宝 编辑:程序博客网 时间:2024/06/13 22:53
一、基数排序
1、基数排序又叫桶排序,借助多关键字排序的思想对单逻辑关键字进行排序。
2、基本思想:
(1)用0~9作为下标分别记录的个位、十位、百位...0~9的数字,首先对应个位将数据入桶。
(2)保证先进先出将数据重新排列,然后相同的方法看十位数字将数据入桶。
(3)重新排列,依次比较。
3、排列的趟数等于最大数的位数
4、代码如下:
#include<stdio.h>#include<math.h>#define N 14int FindMaxFinger(int arr[], int len){int max = arr[0];for (int i = 1; i < len; ++i){if (arr[i] > max){max = arr[i];}}int count = 0;while (max != 0){max = max / 10;count++;}return count;}//每个数据 位的数 (45 0) 5 (45 1) 4//num/pow(10.0,fin)%10int FindFingerNumber(int num, int fin){return num / (int)pow(10.0,fin) % 10;}//0 ,1,2(个,十,百) 0不能参与排序void Radix(int arr[], int len, int fin){int tmp[10][N] = {};int num_fin;int count;for (int i = 0; i < len; ++i){count = 0;num_fin = FindFingerNumber(arr[i], fin);while (tmp[num_fin][count] != 0){count++;}tmp[num_fin][count] = arr[i];}count = 0;for (int i = 0; i < 10; ++i){for (int j = 0; j < len; ++j){if (tmp[i][j] != 0){arr[count++] = tmp[i][j];}else{break;}}}}//0可以参与排序void Radix1(int arr[], int len, int fin){int tmp[10][N] = {};int num_fin;int count[10] = {};for (int i = 0; i < len; ++i){num_fin = FindFingerNumber(arr[i], fin);tmp[num_fin][count[num_fin]] = arr[i];count[num_fin]++;}int index = 0;for (int i = 0; i < 10; ++i){for (int j = 0; j < count[i]; ++j){arr[index++] = tmp[i][j];}}}//每趟循环调用Radix()void RadixSort(int arr[], int len){int maxFinNum = FindMaxFinger(arr, len);for (int i = 0; i < maxFinNum; ++i){Radix1(arr, len, i);}}int main(){int arr[N] = { -1,0,45, 5, 4, 12, 4, 156, 456, 465, 4, 12, 16, 6 };int len = N;RadixSort(arr,len);return 0;}
阅读全文
0 0
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- Cool Shortcuts
- 更新Python3后,Vim 提示:无法加载Python?
- [python] 命令行解析argparse
- java 打印日志的几种方式
- G
- 基数排序
- MongoDB开发学习(2)索引的基本操作
- HDU6172-Array Challenge
- [py]一步一步实现tornado form验证
- 分布式应用系统服务器上下线动态感知程序开发学习笔记
- not in 和 not exists 区别
- mongodb常用命令
- python中文件基本操作
- keilc 4 编译出现的几个错误解决