ef 排序string转int_Java排序算法——基数排序(Radix Sort)
生活随笔
收集整理的這篇文章主要介紹了
ef 排序string转int_Java排序算法——基数排序(Radix Sort)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基數排序
基數排序是非比較的排序算法,對每一位進行排序,從最低位開始排序,復雜度為O(kn),為數組長度,k為數組中的數的最大的位數;
基數排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次類推,直到最高位。有時候有些屬性是有優先級順序的,先按低優先級排序,再按高優先級排序。最后的次序就是高優先級高的在前,高優先級相同的低優先級高的在前。基數排序基于分別排序,分別收集,所以是穩定的。
Java代碼
以下代碼方便復制
public class RadixSort { public static void main(String[] args) { int[] array = new int[]{0,53,63,38,71,25,22,11,95,38}; sort(array); System.out.println(Arrays.toString(array)); } public static int[] sort(int[] array) { if (array == null || array.length < 2){ return array;} int max = array[0]; for (int i = 1; i < array.length; i++) { max = Math.max(max, array[i]); } //計算最大數的位數 int maxDigit = 0; while (max != 0) { max /= 10; maxDigit++; } int mod = 10, div = 1; ArrayList> bucketList = new ArrayList<>(); for (int i = 0; i < mod; i++){ bucketList.add(new ArrayList<>()); } for (int i = 0; i < maxDigit; i++, mod *= 10, div *= 10) { for (int j = 0; j < array.length; j++) { int num = (array[j] % mod) / div; bucketList.get(num).add(array[j]); } int index = 0; for (int j = 0; j < bucketList.size(); j++) { for (int k = 0; k < bucketList.get(j).size(); k++) { array[index++] = bucketList.get(j).get(k); } bucketList.get(j).clear(); } } return array; }}總結
以上是生活随笔為你收集整理的ef 排序string转int_Java排序算法——基数排序(Radix Sort)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: avogadro_Avogadro
- 下一篇: 大橙子_一颗橙子多甜多大,想要甜的还是酸