本文主要是介绍sdnuoj 1060 找第K大数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1060.找第K大数 |
Time Limit: 1000 MS Memory Limit: 32768 KB Total Submission(s): 109 Accepted Submission(s): 22 |
Description |
给定 n(1 <= n <= 10000000) 个正整数(<= 2147483647),找出其中的第K(1 <= K <= 10)大数。 |
Input |
第一行,两个整数n, K,第二行n个整数 |
Output |
第K大数 |
Sample Input |
|
Sample Output |
8 TOP K算法 堆排序
#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std;
int n,k;
int dui[101];
void duipai(int i){int t1=2*i;int t2=t1+1;int pos,temp;if(t1>k) return;else{if(t2>k)pos=t2;elsepos=dui[t1]>dui[t2]?t2:t1;if(dui[i]>dui[pos]){temp=dui[i];dui[i]=dui[pos];dui[pos]=temp;duipai(pos);}}
}
void create(){int pos=k/2;int i;for(i=pos;i>=1;i--)duipai(i);
}
int main(){int i,tmp;scanf("%d%d",&n,&k);for(i=1;i<=k;i++)scanf("%d",&dui[i]);create();for(i=k+1;i<=n;i++){scanf("%d",&tmp);if(tmp>dui[1]){dui[1]=tmp;duipai(1);}}printf("%d\n",dui[1]);return 0;
}
|
这篇关于sdnuoj 1060 找第K大数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!