我經歷了許多網站的計數排序代碼。 他們正在使用count的累加和,然後進一步數組索引。我打算問爲什麼他們不使用正常的數組打印:計數排序,爲什麼要使用累計
如果[count(origArray(i))!= 0]中的origArray(i)的計數,循環計數(origArray(i))並打印我。
這是因爲使用Counting排序的要點是NO COMPARISON,並且在我的代碼中與0進行比較。
看到這個代碼:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class CountingSort {
public static void main(String... args) throws IOException {
new CountingSort().sort();
}
private void sort() throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line;
int max = 0;
String data = "";
while ((line = reader.readLine()) != null && line.length() != 0) {
data += line;
}
String[] ip = data.split(" ");
int[] intArray = new int[ip.length];
for (int i = 0; i < ip.length; i++) {
intArray[i] = Integer.parseInt(ip[i]);
if (intArray[i] > max)
max = intArray[i];
}
int[] count = new int[max+1];
Arrays.fill(count, 0);
for (int i = 0; i < intArray.length; i++) {
++count[intArray[i]];
}
for (int i = 0; i < max; i++) {
if (count[i] != 0) {
for (int j = 0; j < count[i]; j++)
System.out.print(" " + i);
}
}
}
}
「無比較」意味着密鑰不會相互比較以確定它們的相對順序。除了少許冗餘之外,你認爲你的代碼有什麼問題? – dasblinkenlight
沒什麼錯,在其他網站上他們使用了總和的概念,所以我認爲這個實現可能有問題。 –
什麼冗餘? –