头歌计数排序c语言
时间: 2023-08-24 20:20:01 浏览: 89
计数排序是一种非比较排序算法,可以用于对一定范围内的整数进行排序。下面是一个使用C语言实现的计数排序代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
void CountSort(int arr[], int n) {
int max = arr[0], min = arr[0], i, j;
for (i = 1; i < n; i++) {
if (arr[i] > max) {
max = arr[i];
}
if (arr[i] < min) {
min = arr[i];
}
}
int range = max - min + 1;
int *count = (int *)calloc(range, sizeof(int)); // 初始化count数组为0
for (i = 0; i < n; i++) {
count[arr[i] - min]++;
}
for (i = 1; i < range; i++) {
count[i] += count[i - 1];
}
int *output = (int *)malloc(n * sizeof(int));
for (i = n - 1; i >= 0; i--) {
output[count[arr[i] - min] - 1] = arr[i];
count[arr[i] - min]--;
}
for (i = 0; i < n; i++) {
arr[i] = output[i];
}
free(count);
free(output);
}
int main() {
int arr[MAXSIZE], n, i;
printf("请输入数组的大小和元素:\n");
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
CountSort(arr, n);
printf("排序后的结果为:\n");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
在这个示例中,我们首先找到数组中的最大值和最小值,并计算出他们之间的范围。然后,我们使用`calloc`函数初始化一个大小为范围的`count`数组,并将其中所有元素赋值为0。接下来,我们遍历整个数组,并将每个元素的计数值加1。然后,我们再次遍历`count`数组,将每个元素加上前一个元素的计数值。这样,`count`数组中的每个元素就是该元素值小于或等于该索引的元素数量。接下来,我们创建一个输出数组,并遍历原始数组,将每个元素放入输出数组中的正确位置。最后,我们将输出数组复制回原始数组,完成排序。在代码的最后,我们使用`free`函数释放`count`和`output`数组所占用的内存。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)