原理

对一个数组进行遍历,再创建一个count数组

每找到一个值则在count数组中对应的位置加一,再在count数组中找到数字上方的count值,count值为几,则打印几次数组中的值.

开空间

相对映射

排序的实现

void CountSort(int* a, int n)
{
	int min = a[0], max = a[0];
	for (int i = 1; i < n; i++)
	{
		if (a[i] < min)
		{
			min = a[i];
		}
		if (a[i] > max)
		{
			max = a[i];
		}
		int range = max - min + 1;
		int* count = (int*)calloc(range, sizeof(int));
		if (count == NULL)
		{
			perror("calloc fail!");
		}

		//统计次数
		for (int i = 0; i < n; i++)
		{
			count[a[i] - min]++;
		}

		//排序
		int j = 0;
		for (int i = 0; i < n; i++)
		{
			while (count[i]--)
			{
				a[j++] = i + min;
			}
		}

	}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部