计数排序详解

个人主页:Lei宝啊

愿所有美好如期而遇


前言

这种排序在部分情境下出奇地好,也是一种不错的排序

思路

有一个无序数组,我们从中找到最小和最大的数,最大的数减最小的数+1的大小就是我们将要新建数组的大小,这个新建数组的作用就是存储无序数组中每个数有多少个,然后我们通过新建数组从头到尾或从尾到头将值重新赋回原数组。

代码

需要提到的是我们在新建数组中将减去最小值统计,在往回赋值时再加上最小值。

复制代码
//计数排序
void CountSort(int* arr, int n)
{
	int min = arr[0];
	int max = arr[0];

	for(int i = 1; i < n; i++)
	{
		if (min > arr[i])
			min = arr[i];
			
		if (max < arr[i])
			max = arr[i];
	}

	int* temp = (int*)malloc(sizeof(int) * (max - min + 1));
	memset(temp, 0, sizeof(int) * (max - min + 1));

	for (int i = 0; i < n; i++)
	{
		temp[arr[i] - min]++;
	}

	int index = 0;
	for (int i = 0; i <= n; i++)
	{
		while (temp[i] != 0)
		{
			arr[index++] = i + min;
			temp[i]--;
		}
	}

	free(temp);
}

相关推荐
修己xj8 分钟前
探索设计模式的宝库:Java-Design-Patterns
算法
鲨鱼辣椒_TUT11 分钟前
MySQL连接算法和小表驱动大表的原理
mysql·算法·adb
设计师小聂!24 分钟前
力扣热题100------21.合并两个有序链表
算法·leetcode·链表
এ᭄画画的北北1 小时前
力扣-1.两数之和
数据结构·算法·leetcode
shenghaide_jiahu2 小时前
数学建模——递归和动态规划
算法·数学建模·动态规划
黄昏晓x2 小时前
数据结构----排序
java·数据结构·排序算法
凯子坚持 c2 小时前
动态规划专题:详解二维费用背包问题——以“一和零”与“盈利计划”为例
算法·动态规划
黑色的山岗在沉睡2 小时前
P1948 [USACO08JAN] Telephone Lines S
数据结构·c++·算法·图论
快去睡觉~3 小时前
力扣301:删除无效的括号
数据结构·算法·leetcode
技术炼丹人4 小时前
从RNN为什么长依赖遗忘到注意力机制的解决方案以及并行
人工智能·python·算法