欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Day7 洛谷P1138 第k小整数(桶排序)

程序员文章站 2022-05-14 18:56:33
...

题目

现有n个正整数,n≤10000,要求出这n个正整数中的第k个最小整数(相同大小的整数只计算一次),k≤1000,正整数均小于30000。

输入输出格式

输入格式:
第一行为n和k; 第二行开始为n个正整数的值,整数间用空格隔开。

输出格式:
第k个最小整数的值;若无解,则输出“NO RESULT”。

输入输出样例

输入样例#1:
10 3
1 3 3 7 2 5 1 2 4 6
输出样例#1:
3

答案

#include<stdio.h>
int main()
{
	int n,k;//代表一共有n个整数,要找第k小的数
	int a[30005]={0};//储存n个整数
	int b[30005]={0};//做桶
	int i,t;//角标,中间量 
	int cnt=0;//计数器
	scanf("%d %d",&n,&k);
	for (i=1;i<=n;i++)
	 {
	 	scanf("%d",&a[i]);
	 	t=a[i];//将该整数赋给中间量t,便于在桶堆中记录
	 	b[t]=1;//b数组中相应的位置赋1
	 }
	for (i=1;i<=30005;i++)//开始遍历处理桶堆
	{
		if (b[i])//若b中相应位置不为0 证明输入的n的整数中有这个数
		{
			cnt++;
		}
		if (cnt==k)
		{
			printf("%d",i);
			return 0;
		}
	} 
	if (cnt<k)
	{
		printf("NO RESULT");
	}
	return 0;
}

补充资料:
桶排序相关介绍(来自《啊哈算法》