计数排序

本文深入探讨了计数排序算法的原理、实现过程及其在处理特定数据范围内的高效排序场景的应用。通过实例演示了如何在输入元素介于0到k之间的场景下,利用计数排序实现O(n)时间复杂度的排序操作。

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

计数排序假设n个输入元素中每一个都介于0到k之间的整数,此处k为某个整数,当k=O(n)时,计数排序的运行时间为O(n)
计数排序的基本思想就是对于每一个输入元素x,确定小于x的元素个数,利用这一信息就可以将x安放在最终输出数组的正确位置上。
在计数排序中,假设输入数组为A,排序后的输出数组为B,元素介于0和k之间
void count_sort(const vector<int>& A,vector<int>& B,const int& k)
{
	vector<int> number(k+1,0);
	
	for(int i = 0;i < A.size();i++)//计算每一个元素出现的次数
		number[A[i]]++;

	for (int i = 1;i <= k;i++)//计算每一个元素,保存小于等于其本身的元素的个数
		number[i] += number[i-1];

	for (int i = A.size()-1;i >= 0;i--)//根据小于等于其本身元素的个数,将该元素安插到正确位置,安插完一个后,小于等于其本身的元素个数减1
	{
		B[number[A[i]]-1] = A[i];
		number[A[i]]--;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值