#include "iostream" #include "vector" #include "algorithm" using namespace std; void HeapAdjust(std::vector<int> &a,int i,int size){ int lchild = 2*i + 1; int rchild = 2*i + 2; int max = i; if(i < size/2 ){ if(lchild<size&&a[lchild]>a[max]) max = lchild; if(lchild<size&&a[rchild]>a[max]) max = rchild; if(max != i){ swap(a[i],a[max]); HeapAdjust(a,max,size); } } } void BuildHeap(std::vector<int> &a,int k){ for (int i = k-1; i >= 0; --i) { HeapAdjust(a,i,k); } } int main(int argc, char const *argv[]) { std::vector<int> a(6); a[0] = 3;a[1] = 11; a[2] = 8;a[3] = 2; a[4] = 9;a[5] = 4; int k = 3;//取前k最小的 BuildHeap(a,k); for (int i = k; i < a.size(); ++i) { if(a[0] > a[i]) { swap(a[0],a[i]); HeapAdjust(a,0,k); } } for (int i = 0; i < k; ++i) { cout<<a[i]<<"\t"; } return 0; }