您的位置:首页 > 其它

排序算法(十一) 基数排序

2016-10-27 15:16 162 查看
package study;

public class SortNumberTest {

public static void main(String[] args) {
Test1();
}

public static void Test1(){

System.out.println("基数排序");
int[] numbers12={ 50, 123, 543, 187, 49, 30, 0, 2, 11, 100};
radixSort(numbers12);
System.out.println("...................................");

}

//基数排序需依赖于其它排序方法,本身不是一种独立的排序方法
//所用的其它辅助排序方法必须稳定,否则排序出错
public static void radixSort(int[] numbers) {
print(numbers);
//这里为了展示主要代码,部分值先直接定死,可根据实际情况改造
int radix = 10; // 基数
int digit=3;//位数
int i = 0, j = 0;
int[] count = new int[radix];
int[] bucket = new int[numbers.length];
// 按照从低位到高位的顺序执行排序过程,即所谓的LSD
for (int d = 1; d <= digit; d++) {
for (i = 0; i < radix; i++) {
count[i] = 0;
}
for (i = 0; i < numbers.length; i++) {
j = getDigit(numbers[i], d);
count[j]++;
}
for (i = 1; i < radix; i++) {
count[i] = count[i] + count[i - 1];
}
for (i = numbers.length-1; i >= 0; i--) {
j = getDigit(numbers[i], d); //该位无数字则记为0
bucket[count[j] - 1] = numbers[i];
count[j]--;
}
for (i = 0, j = 0; i < numbers.length; i++, j++) {
numbers[i] = bucket[j];
}
print(numbers);
}
}

private static int getDigit(int x, int d) {
int a[] = {
1, 1, 10, 100
};
return ((x / a[d]) % 10);
}

private static void  print(int[] numbers){
for (int i = 0; i < numbers.length; i++) {
System.out.print(numbers[i]+" ");
}
System.out.println();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: