数据结构与算法系列之计数排序

数据结构与算法系列之计数排序_第1张图片

博客:小怡同学
个人简介:编程小萌新
如果博客对大家有用的话,请点赞关注再收藏

计数排序

计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。

代码实现

void CountSort(int* a, int size)
{
	int min = a[0];
	int max = a[0];
	for (int i = 0; i < size; i++)
	{
		if (min > a[i])
		{
			min = a[i];
		}
		if (max < a[i])
		{
			max = a[i];
		}
	}

	int range = max - min + 1;
	int* arr = (int*)malloc(sizeof(int) * range);
	for (int i = 0; i < range; i++)
	{
		arr[i] = 0;
	}

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

	int index = 0;
	for (int i = 0; i < range ; i++)
	{
		while(arr[i]--)
		{
			a[index++] = i + min;
		}
	}

}

时间复杂度

时间复杂度为O(N+k)

数据结构与算法系列之计数排序_第2张图片

你可能感兴趣的:(排序算法,数据结构,算法)