用Java實現計數排序算法
已發表: 2023-01-30
什麼是計數排序算法?
計數排序,一種對small ranges of integers有效的排序算法。 它的工作原理是計算輸入數組中每個值的出現次數,然後使用該信息將每個值放在輸出數組中的正確位置。
該算法的時間複雜度為O(n+k) ,其中 n 是輸入數組的大小,k 是整數的範圍。
CrunchifyCountingSortAlgo.java
這是 Java 中計數排序的完整實現。 只需將其複製到您喜歡的 IDEA 中並運行即可。
包 crunchify.com.java.tutorials;
導入 java.util.Arrays;
/**
* @author Crunchify.com
* 程序:如何在java中實現計數排序算法?
* 計數排序是一種排序算法,對數組的元素進行排序
* 通過計算數組中每個唯一元素的出現次數。
*/
公共類 CrunchifyCountingSortAlgo {
public static void main(String[] args) {
// 10 個元素的整數數組
int[] crunchifyArray = {9, 3, 6, 6, 1, 12, 32, 29, 2, 9, 3};
crunchifyPrint("原始數組:" + Arrays.toString(crunchifyArray));
crunchifyPrint ("\n");
CrunchifyCountingSortAlgo crunchify = new CrunchifyCountingSortAlgo();
crunchify.crunchifyCountingSortAlgorithm(crunchifyArray);
crunchifyPrint ("\n");
crunchifyPrint("Crunchify 計數排序算法的結果:" + Arrays.toString(crunchifyArray));
}
private static void crunchifyPrint(String s) {
System.out.println(s);
}
/**
* 作者:App Shah (Crunchify.com)
*
* 計數排序邏輯:
* 這是計數排序的一種實現,一種對小範圍整數有效的排序算法。
* 它通過計算輸入數組中每個值的出現次數來工作,
* 然後使用該信息將每個值放在輸出數組中的正確位置。
* 該算法的時間複雜度為O(n+k),
* 其中 n 是輸入數組的大小,k 是整數的範圍。
*/
public static int[] crunchifyCountingSortAlgorithm(int[] crunchifyArray) {
// getAsInt():如果存在一個值,則返回該值,否則拋出 NoSuchElementException。
int crunchifyMax = Arrays.stream(crunchifyArray).max().getAsInt();
int[] crunchifyCount = new int[crunchifyMax + 1];
// crunchifyCount 輸入數組中每個值的出現次數
對於 (int i = 0; i < crunchifyArray.length; i++) {
crunchifyCount[crunchifyArray[i]]++;
crunchifyPrint("加 1 到 crunchifyCount[" + crunchifyArray[i]
+ "],crunchifyCount 數組現在是:" + Arrays.toString(crunchifyCount));
}
crunchifyPrint ("\n");
詮釋 k = 0;
對於 (int i = 0; i <= crunchifyMax; i++) {
對於 (int j = 0; j < crunchifyCount[i]; j++) {
crunchifyArray[k++] = i;
crunchifyPrint("添加 " + i + " 到位置 " + (k - 1)
+ " 在輸出數組中,輸出數組現在是:" + Arrays.toString(crunchifyArray));
}
}
返回 crunchifyArray;
}
}只需在 IntelliJ IDEA 或 Eclipse IDE 中將上述程序作為 Java 應用程序運行,您將得到如下結果。
IntelliJ IDEA 控制台結果
原始數組:[9, 3, 6, 6, 1, 12, 32, 29, 2, 9, 3] 向 crunchifyCount[9] 加 1,crunchifyCount 數組現在是:[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 將 1 添加到 crunchifyCount[3],crunchifyCount 數組現在是:[0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 將 1 添加到 crunchifyCount[6],crunchifyCount 數組現在是:[0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 將 1 添加到 crunchifyCount[6],crunchifyCount 數組現在是:[0, 0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 將 1 加到 crunchifyCount[1],crunchifyCount 數組現在是:[0, 1, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 將 1 添加到 crunchifyCount[12],crunchifyCount 數組現在是:[0, 1, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 將 1 添加到 crunchifyCount[32],crunchifyCount 數組現在是:[0, 1, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] 將 1 添加到 crunchifyCount[29],crunchifyCount 數組現在是:[0, 1, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1] 將 1 添加到 crunchifyCount[2],crunchifyCount 數組現在是:[0, 1, 1, 1, 0, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1] 將 1 添加到 crunchifyCount[9],crunchifyCount 數組現在是:[0, 1, 1, 1, 0, 0, 2, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1] 將 1 添加到 crunchifyCount[3],crunchifyCount 數組現在是:[0, 1, 1, 2, 0, 0, 2, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1] 將 1 加到輸出數組中的位置 0,輸出數組現在是:[1, 3, 6, 6, 1, 12, 32, 29, 2, 9, 3] 將 2 添加到輸出數組中的位置 1,輸出數組現在是:[1, 2, 6, 6, 1, 12, 32, 29, 2, 9, 3] 將 3 添加到輸出數組中的位置 2,輸出數組現在是:[1, 2, 3, 6, 1, 12, 32, 29, 2, 9, 3] 將 3 添加到輸出數組中的位置 3,輸出數組現在是:[1, 2, 3, 3, 1, 12, 32, 29, 2, 9, 3] 將 6 添加到輸出數組中的位置 4,輸出數組現在是:[1, 2, 3, 3, 6, 12, 32, 29, 2, 9, 3] 將 6 添加到輸出數組中的位置 5,輸出數組現在是:[1, 2, 3, 3, 6, 6, 32, 29, 2, 9, 3] 將 9 添加到輸出數組中的位置 6,輸出數組現在是:[1, 2, 3, 3, 6, 6, 9, 29, 2, 9, 3] 將 9 添加到輸出數組中的位置 7,現在輸出數組為:[1, 2, 3, 3, 6, 6, 9, 9, 2, 9, 3] 將 12 添加到輸出數組中的位置 8,輸出數組現在是:[1, 2, 3, 3, 6, 6, 9, 9, 12, 9, 3] 將 29 添加到輸出數組中的位置 9,輸出數組現在是:[1, 2, 3, 3, 6, 6, 9, 9, 12, 29, 3] 將 32 添加到輸出數組中的位置 10,輸出數組現在是:[1, 2, 3, 3, 6, 6, 9, 9, 12, 29, 32] Crunchify 計數排序算法的結果:[1, 2, 3, 3, 6, 6, 9, 9, 12, 29, 32] 進程結束,退出代碼為 0

如果您在運行計數排序算法 Java 程序時遇到任何問題,請告訴我。
