0
根據其僞我已經實現計數排序(這是written on the blackboard in this video explanation),但對於某些神祕的原因,它似乎並不正確排序。計數排序根據僞執行,但不正常運行
對於測試輸入:10 9 8 7 6 5 4 3 2 1
它給出:3 4 5 6 7 8 1 0 0 9
這似乎是一個非常簡單的問題,但我無法弄清楚爲什麼會發生這種情況。
void counting(int * array, int n){
int *copy, *out, i,j, max, counter;
copy = (int*) malloc(sizeof(int) * max);
out = (int*) malloc(sizeof(int) * n);
max = array[0];
// finds max size
for(i=0;i<n;++i) if(array[i] > max) max = array[i];
// zeroes the counting array
for(i=0;i<max;++i) copy[i] = 0;
//counts
for(i=0;i<n;++i) ++copy[array[i]];
//cumulative sum
for(i=1;i<max;++i) copy[i] += copy[i-1];
//sorts
for(i=n-1;i>=1;--i){
out[copy[array[i]]] = array[i];
--copy[array[i]];
}
//overwrite original array with sorted output
for(i=0;i<n;++i) array[i] = out[i];
}
max'的'值是*不確定*(並似乎是隨機的),當你在分配使用。執行從頂部進入底部,什麼都不做追溯。 –