这个题的话,使用堆排拿头,刚好复习下堆排序的概念以及写法
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
//尝试使用小根堆去解决这个问题
int heap[1005];
int heap_size=0;
void put(int d){
int now,next;
heap[++heap_size]=d;
now=heap_size;
while(now>1){
next=now>>1;
if(heap[now]>=heap[next]) break;
swap(heap[now],heap[next]);
now=next;
}
}
int get(){
int now=1,next,res=heap[1];
heap[1]=heap[heap_size--];
while(now*2<=heap_size){
next=now*2;
if(next<heap_size&&heap[next+1]<heap[next]) next++;
if(heap[now]<=heap[next]) break;
swap(heap[now],heap[next]);
now=next;
}
return res;
}
int main(){
int n,k,tmp;
while(cin>>n>>k){
memset(heap,0,sizeof(heap));
heap_size=0;
for(int i=0;i<n;i++){
cin>>tmp;
put(tmp);
}
while(k--){
cout<<get()<<" ";
}
cout<<endl;
}
return 0;
} 
京公网安备 11010502036488号