基数排序
来源:互联网 发布:ubuntu syslog函数 编辑:程序博客网 时间:2024/06/06 02:00
基数排序的排序趟数取决于待排序列中最大值的位数。
// arr 465 3 获得最大数的位数
int 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;
}
int 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)%10
int FindFingerNumber(int num, int fin)
{
return num / (int)pow(10.0,fin) % 10;
}
//0 ,1,2(个,十,百) 且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];
}
}
{
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);
}
阅读全文
0 0
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 欢迎使用CSDN-markdown编辑器
- BOW
- 欢迎使用CSDN-markdown编辑器
- Canvas的实际使用
- PHP执行外部程序
- 基数排序
- 【京东2017年秋招笔试题】统计移除括号对的方案数
- JSTL标签用法,很重要!!!
- python运算符的优先级
- 最长线段(几何证明题)
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 A,C,F , H
- 大数据分析中的 数据,大数据
- 泛型数组列表 ArrayList 用法总结
- 算法|动态规划问题