首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

什么是计数排序算法?详述计数排序算法的原理?用C语言实现计数排序算法。内附代码。

大家好,我是贤弟!

一、什么是计数排序算法?

计数排序算法是一种非比较排序算法,它的基本思想是对于给定的输入序列中的每一个元素x,确定小于x的元素个数,利用这一信息将x直接放到它在输出序列中的位置上。

二、计数排序算法的原理

计数排序算法的原理如下:

1. 找出待排序的数组中最大和最小的元素,

2. 统计数组中每个值为i的元素出现的次数,存入数组C的第i项,

3. 对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加),

4. 反向填充目标数组:将每个元素i放在新数组的第C[i]项,每放一个元素就将C[i]减去1。

三、代码示例

下面是C语言实现计数排序算法的代码:

#include #include void countingSort(int arr[], int n) { int i, j, max = arr[0], min = arr[0]; 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)); 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[] = {4, 2, 2, 8, 3, 3, 1}; int n = sizeof(arr) / sizeof(arr[0]); countingSort(arr, n); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); return 0;}

注意:

上述代码中,我们首先找出待排序数组中的最大值和最小值,然后创建一个大小为range的计数数组count,并将每个元素出现的次数存入count数组中。

接着,我们将count数组中的元素累加,这样count[i]就表示小于等于i的元素个数。最后,我们创建一个输出数组output,并将arr数组中的元素按照count数组中的计数放入output数组中,完成排序。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O2nTXl0y7dGQNREyeExrw_cg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券