`
ordinary
  • 浏览: 77245 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

计算机程序设计艺术-----基数排序

J# 
阅读更多
箱排序:也称桶排序。
基本思想:设置多[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++;
}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics