📅  最后修改于: 2023-12-03 14:57:26.157000             🧑  作者: Mango
计数排序是一种常见的线性时间复杂度的排序算法,适用于整数排序问题。它通过统计每个元素出现的次数,并通过累加计算元素的正确位置,最终得到排序后的结果。
计数排序的算法步骤如下:
以下是使用 C 编程语言实现计数排序算法的代码示例:
#include<stdio.h>
#include<stdlib.h>
// 最大元素值
#define MAX_VALUE 100
void countingSort(int array[], int size) {
int count[MAX_VALUE+1] = {0}; // 计数数组
// 统计每个元素出现的次数
for (int i = 0; i < size; ++i) {
++count[array[i]];
}
// 对计数数组进行累加
for (int i = 1; i <= MAX_VALUE; ++i) {
count[i] += count[i-1];
}
int temp[size]; // 临时数组
// 根据计数数组的正确位置信息进行排序
for (int i = size-1; i >= 0; --i) {
temp[count[array[i]]-1] = array[i];
--count[array[i]];
}
// 将临时数组中的元素复制回原数组
for (int i = 0; i < size; ++i) {
array[i] = temp[i];
}
}
int main() {
int array[] = {7, 5, 2, 9, 1, 4, 8, 6, 3};
int size = sizeof(array) / sizeof(array[0]);
countingSort(array, size);
printf("排序后的数组:");
for (int i = 0; i < size; ++i) {
printf("%d ", array[i]);
}
printf("\n");
return 0;
}
排序后的数组:1 2 3 4 5 6 7 8 9
通过计数排序算法,我们把输入数组 {7, 5, 2, 9, 1, 4, 8, 6, 3}
进行排序,得到了一个升序数组 {1, 2, 3, 4, 5, 6, 7, 8, 9}
。计数排序算法的时间复杂度为 O(n+k),其中 n 是数组的大小,k 是最大元素值。