Java提高 - 八大排序方法之基数排序
来源:互联网 发布:js if判断不等于1或2 编辑:程序博客网 时间:2024/05/17 22:42
基数排序
原理:将数字按位数划分出n个关键字,每次针对一个关键字进行排序,然后针对排序后的序列进行下一个关键字的排序,循环至所有关键字都使用过则排序完成。好像很难理解是吧,这里举个例子就容易多了,你可以先创建十个数组,第一个数组放个位数0的、第二个数组放个位数是1的,依次类推。然后把他们重新排列下来,清空数组。接下来第一个数组放十位数为0的、第二个放十位数为1的,依次类推,然后把他们重新排列下来,清空数组。
假设数组为:73, 22, 93, 43, 55, 14, 28,65, 39, 81
第一次分组为:
[0][]
[1][81]
[2][22]
[3][73,93,43]
[4][14]
[5][55,65]
[6][]
[7][]
[8][28]
[9][39]
重新排列为:81, 22, 73, 93, 43, 14, 55,65, 28, 39
第二次分组为:
[0][]
[1][14]
[2][22,28]
[3][39]
[4][43]
[5][55]
[6][65]
[7][73]
[8][81]
[9][93]
重新排列为:14, 22, 28, 39, 43, 55, 65,73, 81, 93
这里第一次排序会把各位数比较大的放到后面,这样会使十位数相同的数组个位数大的一定在后面,同理重排序十位数便可重新排列顺序。
要点:对关键字的选取,元素分配收集。
实现:
/** * 基数排序 * @param number * @param d 表示最大的数有多少位 */public static void RadixSort(int[] number, int d) { // d表示最大的数有多少位int k = 0;int n = 1;int m = 1; // 控制键值排序依据在哪一位int[][] temp = new int[10][number.length]; // 数组的第一维表示可能的余数0-9int[] order = new int[10]; // 数组orderp[i]用来表示该位是i的数的个数while (m <= d) {for (int i = 0; i < number.length; i++) {int lsd = ((number[i] / n) % 10);temp[lsd][order[lsd]] = number[i];order[lsd]++;}for (int i = 0; i < 10; i++) {if (order[i] != 0)for (int j = 0; j < order[i]; j++) {number[k] = temp[i][j];k++;}order[i] = 0;}n *= 10;k = 0;m++;}}
0 0
- Java提高 - 八大排序方法之基数排序
- 八大排序之基数排序
- 八大排序算法之-基数排序 java代码
- Java提高 - 八大排序方法之直接插入排序
- Java提高 - 八大排序方法之希尔排序
- Java提高 - 八大排序方法之冒泡排序
- Java提高 - 八大排序方法之快速排序
- Java提高 - 八大排序方法之直接选择排序
- Java提高 - 八大排序方法之堆排序
- Java提高 - 八大排序方法之归并排序
- Java提高 - 八大排序方法之其他算法
- 八大排序算法之基数排序
- 八大排序算法之基数排序
- 八大排序算法--基数排序
- 八大排序--基数排序
- 八大排序算法-基数排序
- Java 排序之 基数排序
- java排序之【基数排序】
- p122.10
- android仿首页广告轮播效果附源码
- Android权限配置
- android 软键盘回车变搜索
- P123.30t 输出杨辉三角任意位置的数
- Java提高 - 八大排序方法之基数排序
- 第二章第9题
- WIFI DIRECT开发(一)成本模型与可行性分析
- JavaScript网页特效范例目录
- 第三章 16
- 【codeforces】528D. Fuzzy Search【FFT】
- SQL 行转列和列转行
- Calender
- Qt中打开二维、三维的工程图