较为详细的分析http://blog.youkuaiyun.com/v_JULY_v/article/details/6370650
//题目:输入n个整数,输出其中最小的k个。
//例如输入1,2,3,4,5,6,7和8这8个数字,
//则最小的4个数字为1,2,3和4。
//选择K小/K大
//解法,建立K大小的已经排序的数组/堆/二叉树,跟着维持这个解空间的大小,插入n个数
#include "stdafx.h"
#include <iostream>
using namespace std;
#define IMINSIZE 4
#define MAXVALUE 9999//设最大值为9999
void insert(int ipRsArr[],int iValue){
ipRsArr[IMINSIZE] = iValue;
int i = IMINSIZE;
while (i > 0){
if (ipRsArr[i] < ipRsArr[i - 1]){
ipRsArr[i] ^= ipRsArr[i - 1];
ipRsArr[i - 1] ^= ipRsArr[i];
ipRsArr[i] ^= ipRsArr[i - 1];
}else break;
i--;
}
return ;
}
int main(){
int n;
int value;
int ipRsArr[IMINSIZE + 1];
while (cin>>n){
for (int i = 0; i<= IMINSIZE; i++){
ipRsArr[i] = MAXVALUE;
}
while (n--){
cin>>value;
insert(ipRsArr,value);
}
for (int i = 0; i<IMINSIZE; i++){
cout<<ipRsArr[i]<<" ";
}
cout<<endl;
}
return 0;
}