计数排序的C实现

本文详细介绍了计数排序算法的实现原理及步骤,通过具体的代码示例展示了如何统计数组中各元素的出现次数并进行排序。该算法适用于小型数据集,但对大型数据集则存在较大的空间开销。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1 /×
 2  ×统计数组中元素出现的个数,将得到的统计个数记录在新数组的中
 3  ×/
 4 
 5 void CountingSort(int *array, int length)
 6 {
 7     int t;
 8     int i, z = 0;
 9     int min, max;
10     int *count;
11 
12     /*找出数组的最大最小值,确定计数的范围
13     */
14     min = max = array[0];
15     for(i = 0; i < length; ++i) {
16         if(array[i] < min)
17             min = array[i];
18         else if(array[i] > max)
19             max = array[i];
20     }
21     
22     //分配统计计数数组空间,大小为原数组的数域范围
23     count = (int *)malloc((max - min + 1) * sizeof(int));
24     for(i = 0; i < max - min + 1; ++i) {
25         count[i] = 0;
26     }
27     //统计array中每个元素出现的次数,并将次数保存在
28     //count[array[i]]中,此处减去min是为了节省统计数组的空间
29     for(i = 0; i < length; ++i) {
30         count[array[i] - min]++;
31     }
32 
33     //将统计数组还原到array中,其中array范围为min到max
34     //此处很好的解决了统计时节省空间减去min造成的不对称问题
35     for(t = min; t <= max; ++t) {
36         for(i = 0; i < count[t-min]; ++i) {
37             array[z++] = t;
38         }
39     }
40     free(count);
41 }

对于处理小型数据的排序速度较快,但是空间开销过大不适合大型数据。

转载于:https://www.cnblogs.com/jojodru/archive/2012/05/10/2494628.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值