怎么用C语言编计数排序
时间: 2023-09-20 13:14:41 浏览: 55
以下是一个使用C语言编写计数排序的示例程序:
```
#include <stdio.h>
// 计数排序函数
void countingSort(int arr[], int n) {
int max = arr[0], min = arr[0];
for (int 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[range];
int output[n];
for (int i = 0; i < range; i++) {
count[i] = 0;
}
for (int i = 0; i < n; i++) {
count[arr[i] - min]++;
}
for (int i = 1; i < range; i++) {
count[i] += count[i - 1];
}
for (int i = n - 1; i >= 0; i--) {
output[count[arr[i] - min] - 1] = arr[i];
count[arr[i] - min]--;
}
for (int i = 0; i < n; i++) {
arr[i] = output[i];
}
}
// 测试计数排序函数
int main() {
int arr[] = { 3, 1, 4, 5, 2 };
int n = sizeof(arr) / sizeof(arr[0]);
printf("Before sorting:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
countingSort(arr, n);
printf("\nAfter sorting:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
在这个程序中,`countingSort`函数用于实现计数排序,它接收一个整数数组和数组的长度作为参数。该函数首先找到数组中的最大值和最小值,然后计算出值域范围。接着创建一个计数数组,将数组中每个元素出现的次数计数。然后计算计数数组的前缀和,以便确定每个元素在输出数组中的位置。最后,将原始数组中的元素按照它们在计数数组中的出现次数排序,并将它们存储在输出数组中。最后,将输出数组复制回原始数组中。
在`main`函数中,我们创建一个整数数组并将其传递给`countingSort`函数进行排序。排序完成后,我们打印出排序前后的数组。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.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)