计数排序代码实现及实例化c语言
时间: 2024-05-05 20:01:26 浏览: 84
计数排序是一种简单而有效的排序算法,适用于数据范围较小的情况。
以下是C语言的计数排序代码实现:
```c
void countSort(int arr[], int n) {
int max = arr[0];
for (int i = 1; i < n; i++) {
if (max < arr[i]) {
max = arr[i];
}
}
int *count = (int *) malloc(sizeof(int) * (max + 1));
memset(count, 0, sizeof(int) * (max + 1));
for (int i = 0; i < n; i++) {
count[arr[i]]++;
}
for (int i = 1; i <= max; i++) {
count[i] += count[i - 1];
}
int *output = (int *) malloc(sizeof(int) * n);
for (int i = n - 1; i >= 0; i--) {
output[count[arr[i]] - 1] = arr[i];
count[arr[i]]--;
}
for (int i = 0; i < n; i++) {
arr[i] = output[i];
}
free(count);
free(output);
}
```
在上述代码中,我们首先找出数组中的最大值,然后使用一个计数数组来记录每个元素出现的次数。然后,我们通过对该计数数组进行累加,计算出每个元素的最终位置。最后,我们遍历原始数组,并将元素放入其在输出数组中的正确位置。
以下是计数排序的一个实例:
```c
int main() {
int arr[] = {23, 12, 45, 78, 56, 89, 12, 43};
int n = sizeof(arr) / sizeof(arr[0]);
countSort(arr, n);
printf("Sorted array: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
输出结果:
```
Sorted array: 12 12 23 43 45 56 78 89
```
阅读全文