將所有待比較數值(正整數)統一為同樣的數字長度,數字較短的數前面補零。然後,從最低位開始,依次進行一次排序。這樣從最低位排序一直到最高位排序完成以後,數列就變成乙個有序序列。
參考文章:【點我】
時間複雜度:基數排序中r為基數,d為位數。時間複雜度為o(d(n+r))
空間複雜度:對於任何位數上的基數進行「裝桶」操作時,都需要n+r個臨時空間。
穩定性:相同的數字並不需要交換位置。所以基數排序是穩定的演算法。
排序型別
時間複雜度(平均)
時間複雜度(最壞)
時間複雜度(最好)
空間複雜度
穩定性複雜性
交換排序
o(d(n+r))
o(d(n+r))
o(d(n+r))
o(n+r)
穩定較複雜
public static void main(string args) ;
digitsort(a, a.length);
print(a);// 自定義輸出陣列
}public static int maxbit(int inputlist)
int bitsnum = 0;
while (maxdata > 0)
return bitsnum;
}public static int digit(int num, int d)
return num / pow % 10;
}public static void digitsort(int inputlist, int n)
for (int i = 0; i < n; i++)
for (int i = 1; i < 10; i++)
// 這裡只能從陣列後往前迴圈,因為排序時還需保持以前的已排序好的順序,不應該打亂原來已排好的序
for (int i = n - 1; i >= 0; i--)
for (int i = 0; i < n; i++)
}}
Java實現基數排序
在眾多的排序方法中基數排序比較特殊,它是一種不需要進行關鍵字之間比較的排序方法,利用多關鍵字的劃分,逐漸將待排序列排好序。舉個例子 現在有陣列 278,109,63,930,589,184,505,269,8,83 第一次根據各位數將陣列劃分為10個佇列 當然其中的某些佇列可能不含有元素 0 930...
Java實現基數排序
基數排序不同於之前所介紹的各類排序,前邊介紹到的排序方法或多或少的是通過使用比較和移動記錄 元素 來實現排序,而基數排序的實現不需要進行對關鍵字的比較,只需要對關鍵字進行 分配 與 收集 兩種操作即可完成。例如對無序表 進行基數排序,由於每個關鍵字都是整數數值,且其中的最大值由個位 十位和百位構成,...
基數排序法(Java實現)
class demo 呼叫基數排序函式 lsd radixsort arr,3 輸出排序後的陣列 for int i 0 i arr是要排序的陣列,max是陣列中最大的數有幾位 public static void lsd radixsort int arr,int max 分別統計第k位是0,1,...