排序之基數排序

1.定義:基數排序又稱“桶子法”,它是透過鍵值的部份資訊,將要排序的元素分配至某些“桶”中,藉以達到排序的作用。

2.排序演示:

    如排序:42,73,29,11,7,50,66,59,100,21

這個時候需要3次排序因爲有100這個數,設爲d(個十百)

第一次以個爲排序:

這個時候需要準備兩個數組 一個爲二維數組用於存儲收集好的數據,如0的位置爲50,100 一個用於存放對應二維數組位置上存幾個元素如0的位置爲2


經過第一次排序收集的數據如下:50,100,11,21,42,73,66,7,29,59

第二次以十爲排序


經過第二次排序收集的數據如下:100,7,11,21,29,42,50,59,66,73

第三次以百爲排序


3.代碼:

public class RadixSort {
	public static void sort(int[] number, int d) {
		int k = 0;
		int n = 1;
		int m = 1;// 控制鍵值排序依據在哪一位
		int[][] temp = new int[number.length][number.length];
		int[] order = new int[number.length];
		while (m <= d) {
			for (int i = 0; i < number.length; i++) {
				int lsd = ((number[i] / n) % 10);
				temp[lsd][order[lsd]] = number[i];
				order[lsd]++;
			}
			for (int i = 0; i < 10; i++) {
				if (order[i] != 0)
					for (int j = 0; j < order[i]; j++) {
						number[k] = temp[i][j];
						k++;
					}
				order[i] = 0;
			}
			n *= 10;
			k = 0;
			m++;
		}
	}

	public static void main(String[] args) {
		int[] data = { 100, 7, 11, 21, 29, 42, 50, 59, 66, 73 };
		RadixSort.sort(data, 3);
		for (int i = 0; i < data.length; i++) {
			System.out.print(data[i] + " ");
		}
	}
}

4.使用環境:在數據大時並且需要排序的數據較少時。因爲大的數據影響循環次數

5.是一種穩定的排序算法

6.時間複雜度:從代碼上看直接可以得出d(n+rd) r爲桶值 d爲每個桶裏存的長度

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