基數排序

原理:

 

僞代碼:

 

java代碼

import java.util.Arrays;

public class MyRadixSort {
	
	public static void sortPos(int[] arr , int exp){
		int [] bucket = new int[10];
		int [] output = new int[arr.length];
		for(int i = 0 ; i <arr.length ; i++){
			int last = getLast(arr[i],exp);
			bucket[last] ++;
		}
		for(int i=1;i<bucket.length;i++){
			bucket[i]+=bucket[i-1];
		}
		for(int i = arr.length-1;i>=0;i--){
			int last = getLast(arr[i],exp);
			//System.out.println("Last of "+arr[i]+" is "+last);
			int index = bucket[last] -1;
			output[index] = arr[i];
			bucket[last]--;
		}
		System.arraycopy(output, 0, arr, 0, arr.length);
	}
	public static void bucketSort(int[] arr){
		int max = getMax(arr);
		for(int exp=1;max/exp>0;exp*=10){
			sortPos(arr,exp);
		}
		System.out.println(Arrays.toString(arr));
	}
	private static int getMax(int[] arr) {
		int max = 0;
		for(int i : arr){
			if(i>max) max = i;
		}
		return max;
	}
	public static void main(String[] args) {
		int[] arr = new int[]{1,41,56,98,123,45,26};
		bucketSort(arr);
	}

	private static int getLast(int i, int exp) {
		i/=exp;
		return i%10;
	}

}

 

關於sortPos最後一個for爲什麼要倒序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章