您的位置:首页 > 编程语言 > Java开发

java-------------基数排序-------------

2011-11-24 18:53 225 查看
基本思想:百度百科-http://baike.baidu.com/view/1170573.htm

1.主程序

package advanced_sort;

import java.util.Vector;

public class RadixSort {

// -----------基数排序---------
public void radixSort(int date[]) {
for (int i = 0; i < 3; i++) {
bucketPush(date, i);
}
}//end radixSort

// 返回value指定位上的数,当d为0时返回value的各位,为1时返回value的十位...
public int digit(int value, int d) {
if (d == 0)
return value % 10;
else {
return digit(value / 10, d - 1);
}
}// end digit

// bucketPush基于数字d,把一组数放置到10个桶中-d由数组中的最大数的位数决定
// 如数组中最大数为三位数100,则d为3
public void bucketPush(int date[], int d) {
Vector<Integer>[] bucket = new Vector[10]; // 建立一个向量数组,包含十个桶。
for (int i = 0; i < 10; i++) {
bucket[i] = new Vector<Integer>();// 构造一个空向量,使其内部数据数组的大小为
// 10,其标准容量增量为零

}
int n = date.length;// 数组的元素个数,对每个数进行分析,根据d放入不同的桶中
int j;// 每个数对应位数上的数,根据j判断放入哪个桶中
for (int i = 0; i < n; i++) {
j = digit(date[i], d);
bucket[j].add(new Integer(date[i]));// 将元素放入对应的桶中

}
// 将各个桶中的元素取出,放入数组中
int i = -1;
int value;
for (int k = 0; k < 10; k++) {
while (!bucket[k].isEmpty()) {
i++;
value = bucket[k].remove(0);
date[i] = value;

}

}// end for

}// end bucketPush

}


2.测试程序

package advanced_sort;

public class App {
private static int date[] = new int[20];

/**
* @param args
*/
public static void main(String[] args) {
// ----------------------------
for (int i = 0; i < date.length; i++) {
date[i] = (int) (Math.random() * 100);
}
System.out.println("待排序函数:");
display();
RadixSort radix = new RadixSort();
radix.radixSort(date);
System.out.println("排序后的函数");
display();

}

// --------------------打印函数----------
public static void display() {
for (int i = 0; i < date.length; i++) {
System.out.print(date[i]+"  ");
}
System.err.println();
}
}


3.实验结果

待排序函数:
55  35  14  65  53  75  65  94  80  71  93  27  29  87  19  20  61  99  56  35
排序后的函数
14  19  20  27  29  35  35  53  55  56  61  65  65  71  75  80  87  93  94  99
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: