基数排序
2017-08-29 23:09
218 查看
一、基数排序
1、基数排序又叫桶排序,借助多关键字排序的思想对单逻辑关键字进行排序。
2、基本思想:
(1)用0~9作为下标分别记录的个位、十位、百位...0~9的数字,首先对应个位将数据入桶。
(2)保证先进先出将数据重新排列,然后相同的方法看十位数字将数据入桶。
(3)重新排列,依次比较。
3、排列的趟数等于最大数的位数
4、代码如下:
1、基数排序又叫桶排序,借助多关键字排序的思想对单逻辑关键字进行排序。
2、基本思想:
(1)用0~9作为下标分别记录的个位、十位、百位...0~9的数字,首先对应个位将数据入桶。
(2)保证先进先出将数据重新排列,然后相同的方法看十位数字将数据入桶。
(3)重新排列,依次比较。
3、排列的趟数等于最大数的位数
4、代码如下:
#include<stdio.h> #include<math.h> #define N 14 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 Radix(int arr[], int len, int fin) { int tmp[10] = {}; 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] = {}; 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 = { -1,0,45, 5, 4, 12, 4, 156, 456, 465, 4, 12, 16, 6 }; int len = N; RadixSort(arr,len); return 0; }
相关文章推荐
- 基数排序
- 基数排序
- 数据结构之排序大集合(下)(选择、堆、基数、归并,链表排序)
- 计数排序,基数排序,桶排序算法
- 一步一步写算法(之基数排序)
- 基数排序
- 第十六周 项目1 验证算法 基数排序
- 第十六周--项目1-验证算法(8)基数排序
- 再回首基数排序
- Java实现-高效排序算法之基数排序
- 重学数据结构002——桶排序、基数排序
- 三大线性排序之基数排序
- 选择排序、冒泡排序、插入排序、基数排序、快速排序、归并排序完整C++实现
- 排序八 基数排序
- 各种常见的排序,冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序,基数排序,桶排序
- 基数排序-C语言实现
- 线性时间排序算法-基数排序
- 链式队列实现基数排序
- 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序
- 基数排序之定长字典排序