我从伪代码实现了一个计数排序算法。在伪代码中,最终循环C[A[j]]
在第一次通过后递减。这将所有内容都向右移动,因此我在第一次通过之前进行了调试和递减以产生正确的结果。但是除了它起作用之外,我看不到其他原因,为什么我必须在之前而不是之后递减。
这是我减量后的结果:
10 1 0 6 8 3 2 0 9 4
0 0 0 1 2 3 4 6 8 9
当我之前递减时:
10 1 0 6 8 3 2 0 9 4
0 0 1 2 3 4 6 8 9 10
显然,由于最初所有内容都向右移动,因此我将所有内容都向左移动,但是为什么一开始就不能正确对齐呢?
int* counting_sort(int A[], int size, int k)
{
int* B = new int[size];
int* C = new int[k+1];
for(int i = 0; i <= k; i++)
C[i] = 0;
for(int j = 0; j < size; j++) {
C[A[j]]++;
}
for(int i = 1; i <= k; i++) {
C[i] += C[i-1];
}
//print(C,k+1);
for(int j = size-1; j >= 0; j--) {
B[--C[A[j]]] = A[j];
}
delete [] C;
return B;
}