使用c语言实现假设含n个记录的序列中,其所有关键字为值介于v和w之间的整数,且其中很多关键字的值是相同的。则可按如下方法排序:另设数组number[v…w],令number[i]统计关键字为整数i的纪录个数,然后按number重排序列以达到有序。试编写算法实现上述排序方法,并讨论此种方法的优缺点。
时间: 2024-03-24 18:36:02 浏览: 102
以下是使用c语言实现的代码:
```
#include <stdio.h>
#include <stdlib.h>
void counting_sort(int arr int n, int v, int w) {
int count[w - v + 1];
for (int i = 0; i < w - v + 1; i++) {
count[i] = 0;
}
for (int i = 0; i < n; i++) {
count[arr[i] - v]++;
}
int index = 0;
for (int i = 0; i < w - v + 1; i++) {
for (int j = 0; j < count[i]; j++) {
arr[index++] = i + v;
}
}
}
int main() {
int arr[] = {5, 3, 7, 2, 8, 4, 5, 7, 1, 6};
int n = sizeof(arr) / sizeof(arr[0]);
int v = 1;
int w = 8;
counting_sort(arr, n, v, w);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
该算法的优点是简单、易于实现,时间复杂度为O(n),适用于处理关键字范围较小的数据。然而,其缺点也很明显,即需要额外的空间来存储计数数组,且在关键字范围较大时,计数数组会变得很大,不仅浪费空间,而且可能导致程序崩溃。此外,该算法也无法处理关键字为负数的情况。
阅读全文