桶式排序java實現代碼
/**
- 基數排序
- 結合桶式排序,分兩種從高位到低位和從低位到高位。案例代碼為從低位到高位
- 第一步:得到數組內最大位數
- 第二步:進行多次 桶式排序,次數為排序最大數字的位數
- 例子:52,38,23,72,271
- 第一步:數組元素最大位數為3,
- 第二步:第一次桶式排序,針對數組元素的個位:排序結果為:271,52,72,23,38,按個位桶式排序就完成了
- 繼續: 第二次桶式排序,按照數組元素的十位:排序結果為:23,38,52,271,72
- 繼續: 第三次桶式排序,按照數組元素的百位:排序結果為:23,38,52,72,271
- 排序完成。
- @author
/
public class RadixSort {
private static int[] array = new int[]{51,82,23,94,35,76,117,238,909,40,11};
public static void main(String args[]){
// getNumberLength(905559);
} private static void radixSort(){System.out.println("排序前"); printArray(array); System.out.println("\n排序后"); radixSort(); printArray(array);
// System.out.println("maxW is:"+maxW);int maxW = 0; int index=0; //第一步:得到數組內最大元素的位數 for(int i=0;i<array.length;i++){ if(maxW<array[i]){ maxW = array[i]; } }
// System.out.println("最大位數為:"+maxW);maxW = getNumberLength(maxW);
//第二步:進行多次 桶式排序,次數為排序最大數字的位數 while(index<maxW){ int[] tempArray = new int[array.length]; int[] bucketArray = new int[10]; System.arraycopy(array, 0, tempArray, 0, array.length); for(int i=0;i<array.length;i++){ bucketArray[getNumberIndex(index, array[i])]++; }
// System.out.println("臨時數組內容:"); // printArray(bucketArray); // System.out.println(); for(int i=1;i<bucketArray.length;i++){ bucketArray[i]=bucketArray[i]+bucketArray[i-1]; } for(int i=array.length-1;i>=0;i--){ array[--bucketArray[getNumberIndex(index, tempArray[i])]] = tempArray[i]; } index++; // System.out.println("第"+index+"排序后:"); // printArray(array); // System.out.println(); } }
private static int getNumberIndex(int index,int number){
int num=0;
num = (int)(number/Math.pow(10, index))%10;
// System.out.println("number is:"+num); return num; }
private static int getNumberLength(int number){
int count = 1;
int index = 1;
// System.out.println("math:"+((int)(number/Math.pow(10, index)))); while((int)(number-Math.pow(10, index))>0){ count++; index++; } System.out.println("count is:"+count); return count; }
public static void printArray(int[] array){
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
}
}</pre>運行結果:
排序前 51 82 23 94 35 76 117 238 909 40 11 排序后 count is:3 11 23 35 40 51 76 82 94 117 238 909來自:http://blog.csdn.net/hailushijie/article/details/8797994