java基數排序
阿新 • • 發佈:2017-08-19
計算 emp imp bucket tmp brush rgs temporary 對待
代碼如下:
import java.util.Arrays; public class MultiKeyRadixSort { public static void radixSort(int [] data, int radix, int d) { System.out.println("開始排序:"); int length = data.length; //需要一個臨時數組 int [] tmp = new int [length]; //buckets數組是桶式排序必須buckets數組 int[] buckets = new int[radix]; //依次從最高位的子關鍵字對待排序數據進行排序 //下面循環中rate用於保存當前計算的位(比如十位時rate =10) for(int i = 0 ,rate = 1;i < d; i++ ) { //重置count數組,開始統計第二個關鍵字 Arrays.fill(buckets, 0); //將data數組的元素復制到temporary數組中進行緩存 System.arraycopy(data, 0, tmp, 0, length); //計算每個待排序數據的子關鍵字 for(int j = 0;j < length;j++) { //計算數據指定位置上的關鍵字 int subKey = (tmp[j]/rate) % radix; buckets[subKey]++; } for(int j = 1;j < radix ;j++) { buckets[j] = buckets[j] + buckets[j-1]; } //按子關鍵字對指定數據進行排序 for(int m = length-1;m >=0;m--) { int subKey = (tmp[m]/rate) % radix; data[--buckets[subKey]] = tmp[m]; } System.out.println("對"+rate+"位上子關鍵字排序:" + java.util.Arrays.toString(data)); rate *= radix; } } public static void main(String[] args) { int[] data = {1100,192,221,12,13}; System.out.println("排序之前:\n" + java.util.Arrays.toString(data)); radixSort(data,10,4); System.out.println("排序之後:\n" + java.util.Arrays.toString(data)); } }
java基數排序