voidCountSort(intarray[], int size){ // 找出最大数和最小数,确定序列的范围 int max = array[0]; int min = array[0]; for (int i = 0; i < size; ++i) { if (array[i] > max) { max = array[i]; } if (array[i] < min) { min = array[i]; } } // rang为序列的范围,开辟额外数组,初始化全为0 int rang = max - min + 1; int* countArr = (int*)malloc(sizeof(int) * rang); for (int i = 0; i < rang; ++i) { countArr[i] = 0; } // 进行计数 for (int i = 0; i < size; ++i) { countArr[array[i] - min]++; } // 将序列拷贝回原序列 int j = 0; for (int i = 0; i < rang; ++i) { while (countArr[i]--) { array[j++] = i + min; } } free(countArr); }
voidCountSort(int sortArr[],intarray[], int size){ // 找出最大数和最小数,确定序列的范围 int max = array[0]; int min = array[0]; for (int i = 0; i < size; ++i) { if (array[i] > max) { max = array[i]; } if (array[i] < min) { min = array[i]; } } // rang为序列的范围,开辟额外数组,初始化全为0 int rang = max - min + 1; int* countArr = (int*)malloc(sizeof(int) * rang); for (int i = 0; i < rang; ++i) { countArr[i] = 0; } // 进行计数 for (int i = 0; i < size; ++i) { countArr[array[i] - min]++; } // 对所有的计数累加 for (int i = 1; i < rang; i++) { countArr[i] += countArr[i - 1]; } // 倒序遍历原始数列,从统计数组找到正确位置,输出到结果数组 for (int i = size - 1; i >= 0; --i) { sortArr[--countArr[array[i] - min]] = array[i]; } free(countArr); }