计数排序 0(n+m).txt

来自「包括计算几何、特殊数据结构、组合数学等知识点的代码。每个代码对应一道ACM试题」· 文本 代码 · 共 43 行

TXT
43
字号
#include <iostream>
#include <iomanip>
#include <stdio.h>
using namespace std;

//计数排序 
//时间复杂度为n+m(m<n,n为要排序的数字个数,m为这些数字中不同数字的个数
/*
输入:
10 8 5
7 5 6 8 8 5 6 7 7 6

输出:
5 5 6 6 6 7 7 7 8 8
*/
int D[10];

void init(int num)
{
	int i;
	for(i=0;i<num;i++) D[i]=0;
}

int main()
{
	int num,a[11],high,low,b[11],i;
	scanf("%d%d%d",&num,&high,&low);
	init(num);
	for(i=0;i<num;i++)
	{
		scanf("%d",&a[i]);
		D[a[i]-low]++;
	}
	for(i=1;i<=high-low;i++)
		D[i]=D[i-1]+D[i];
	for(i=num-1;i>=0;i--)
	{
		b[--D[a[i]-low]]=a[i];
	}
	for(i=0;i<num;i++)
		printf("%d ",b[i]);
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?