排序算法--------计数排序

作者前言

🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂

​🎂 作者介绍: 🎂🎂

🎂 🎉🎉🎉🎉🎉🎉🎉 🎂

🎂作者id:老秦包你会, 🎂

简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂

喜欢学习C语言和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂🎂🎂🎂🎂🎂🎂

🎂个人主页::小小页面🎂

🎂gitee页面:秦大大🎂

🎂🎂🎂🎂🎂🎂🎂🎂

🎂 一个爱分享的小博主 欢迎小可爱们前来借鉴🎂


计数排序

排序的介绍

前面我们学习了插入排序、希尔排序 选择排序 、堆排序 、冒泡排序、快速排序以及归并排序

这些排序都可以在内存中进行排序,不同的是合并排序也可以在磁盘中排序,

怎么在磁盘上排序呢。假设内存只有1G,一个文件里有4G的数据,我们可以通过把这个数据分成4份,每一份我们可以在内存中进行排序,排序好任何写入回去, 然后通过归并排序进行排序好

分配好的每部分先用计数排序进行排序好

计数排序

思路:

遍历一便这个文件数据,统计好这些数值出现的次数,创建一个数组

绝对映射:

找到里面的最大值,以最大值为这个数组的空间,这样很容易造成空间的浪费。

相对映射:

我们可以通过找出其中的最大最小进行相减然后加1,获取到要开辟的大小

我们对每个原数组的元素减去min,然后找到对应的下标的值加1

sql 复制代码
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void CountSort(int* a, int size)
{
	int min = INT_MAX;
	int max = INT_MIN;
	int i = 0;
	//找最大和最小
	for (i = 0; i < size; i++)
	{
		max = (a[i] > max ? a[i] : max);
		min = (a[i] < min ? a[i] : min);
	}
	int range = max - min + 1;
	int* newnum = (int*)calloc(range,sizeof(int));
	//开始计数
	for (i = 0; i < size; i++)
	{
		int num = a[i] - min;
		newnum[num]++;
	}
	//开始往原数组覆盖
	for (i = 0; i < range; i++)
	{
		static int j = 0;
		while (newnum[i]--)
		{
			a[j++] = i + min;
		}
	}
	free(newnum);

}
int main()
{
	int a[] = { 5,2,6,1,4,8,5,6,2,1,5,6,1,2,4,9,5,4,2,6,4 };
	CountSort(a, sizeof(a) / sizeof(a[0]));
	int i = 0;
	for (i = 0; i < sizeof(a) / sizeof(a[0]); i++)
	{
		printf("%d ", a[i]);
	}
	return 0;
}

计数排序的优缺点

1.时间复杂度是O(N+ range),要看N和range哪个大

2.适合于整形,且数值相对集中,比如a10 = {1,200,999999}这个就不能使用了

相关推荐
hansang_IR1 小时前
【题解】P5364 [SNOI2017] 礼物
c++·线性代数·算法
Tisfy1 小时前
LeetCode 3871.统计范围内的逗号 II:每次算一个逗号
数学·算法·leetcode·题解
小O的算法实验室1 小时前
IEEE TEVC,基于K-means与DQN辅助元启发式算法的多目标两栖无人艇调度模型
算法·kmeans·启发式算法
mmmmath_31 小时前
LeetCode.350.两个数组的交集II
算法
Ivanqhz2 小时前
图是“拓扑 + 类型 + 形状“的世界
算法·决策树·机器学习·php·集成学习
find1star2 小时前
LeetCode 54:螺旋矩阵——用四个边界模拟矩阵收缩
java·算法·leetcode·边缘计算·学习方法
z_mazin2 小时前
逆向一种私有二进制序列化格式:从零到字节级解析器
网络·python·网络协议·算法·rpc
luj_17682 小时前
罚球线右移破防新策略
c语言·开发语言·网络·经验分享·算法
vivo互联网技术2 小时前
SmartPhotoCrafter: 先思考后修图,统一理解-生成的图像优化新范式
人工智能·算法·计算机视觉
吞下星星的少年·-·2 小时前
LeetCode 热题 100 两数之和(哈希表)
算法·leetcode·哈希算法