Magic347
2015-10-21 21:06:13 +08:00
void countingSort(int array[], int arraySize, int result[], int k) {
int * countArray = (int *)malloc((k + 1) * sizeof(int));
int countArraySize = k + 1;
for (int i = 0; i < countArraySize; i++) {
countArray[i] = 0;
}
for (int i = 0; i < arraySize; i++) {
countArray[array[i]]++;
}
for (int i = 1; i < countArraySize; i++) {
countArray[i] += countArray[i - 1];
}
for (int i = arraySize - 1; i >= 0; i--) {
result[--countArray[array[i]]] = array[i];
}
countArray[i] 表示原数组中小于等于 i 的元素个数,因此 i 在结果数组 result 中的位置应该就是 countArray[i] - 1 。