基数排序
来源:互联网 发布:碳纤维规格知乎 编辑:程序博客网 时间:2024/04/30 05:00
箱排序:也称桶排序。
基本思想:设置多[k]个箱,依次把a[1],a[2],a[3]…..a[n]按其键值为k放入k个箱中,依次按1-k把k个箱首尾相连。这样就排好序了。
例如:把一副52张牌按照点数排序,可以设置13个箱依次表示为1-13,把点数为A的放到1号箱,点数为2-10的分别放入2-10号箱,把J,Q,K分别放入11-13号箱,这样依次连接1-13号箱,就排好序了。
基数排序:
基数排序的特征:基数排序的每一个键都由d个分量组成ki1,ki2,ki3…ki(d-1),这d个分量每个分量代表一个独立的关键字。如:扑克牌中的点数和花色。
排序思想:从低位到高位依次对kj(j=d-1,d-2,…,0)进行箱排序。在d趟箱排序中,所需的箱子数就是基数rd,这就是"基数排序"名称的由来。
例子:排序下列数73, 22, 93, 43, 55, 14, 28, 65, 39, 81,
按个位分别把需要排序的数放到0-9的桶中。
0
1
2
3
4
5
6
7
8
9
81
22
73
14
55
28
39
93
65
接着把这些桶中的数值按照桶的顺序串起来,如:81, 22, 73, 93, 43, 14, 55, 65, 28, 39
按十位分别数放到0-9的桶中,如:
0
1
2
3
4
5
6
7
8
9
14
22
39
43
55
65
73
81
93
28
接着把这些桶中的数值按照桶的顺序串起来,如:14, 22, 28, 39, 43, 55, 65, 73, 81, 93
这样就排好序了。
代码实现:
public static void sort(int[] number, int d) {
int k = 0;
int n = 1;
int m = 1;
int[][] temp = new int[number.length][number.length];
int[] order = new int[number.length];
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 < d; 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++;
}
}
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 实现模式的确认
- CSDN Blog API
- Oracle 中'union'、'N'关键字用法
- 通过Ubuntu live CD 更改windows密码
- 单例模式
- 基数排序
- 欧拉回路算法C语言
- 选择排序
- Gcc编译静态库/动态库
- ExtJs3.3.1 ComboBox由于readOnly属性引发的数据不显示问题
- 解释器文件(Interpreter Files)
- 標準ALV調用類方法
- java 多线程 主线程等待 子线程序列、并发结果
- 更换 Windows 7 的 Windows Media Center 主题