天天看點

十大排序算法-------【計數排序】詳解(Java源碼)

  1. 算法描述
  1. 找出待排序的數組中最大和最小的元素;
  2. 統計數組中每個值為i的元素出現的次數,存入數組C的第i項;
  3. 對所有的計數累加(從數組C中的第一個元素開始,每一項和前一項相加);
  4. 反向填充目标數組:将每個元素i放在新數組的第C(i)項,每次放一個元素就将C(i)減去1。
  1. 代碼:
private static void jiShu(int[] arrays) {

        int min = arrays[0], max = arrays[0];

        for (int i = 0; i < arrays.length; i++) {

               min = min > arrays[i] ? arrays[i] : min;

               max = max < arrays[i] ? arrays[i] : max;

        }



        int[] jiShuArrays = new int[max + 1];

        for (int i = 0; i < arrays.length; i++) {

               int value = arrays[i];

               jiShuArrays[value] += 1;

        }



        for (int i = 0, a = 0; i < jiShuArrays.length; i++) {

               if (jiShuArrays[i] > 0) {

                      arrays[a++] = i;

               }

        }

}      
  1. 算法分析