voidCountSort(int data[], int n) { if (n <= 1) return;
// 求最大值、最小值 int min = data[0]; int max = data[0]; for (int i = 1; i < n; i++) { if (data[i] < min) min = data[i]; if (data[i] > max) max = data[i]; }
// 创建数组用于计数 int count = max - min + 1; int *tempArray = (int*)malloc(sizeof(int) * count); for (int i = 0; i < count; i++) tempArray[i] = 0; for (int i = 0; i < n; i++) tempArray[data[i] - min]++;
// 输出有序数组 int k = 0; for (int i = 0; i < count; i++) { for (int j = 0; j < tempArray[i]; j++) { data[k++] = i + min; } } // 释放临时数组 free(tempArray); }