01.#include "iostream" 02.#include "vector" 03.#include "algorithm" 04.using namespace std; 05.void HeapAdjust(std::vector<int> &a,int i,int size){ 06. int lchild = 2*i + 1; 07. int rchild = 2*i + 2;
08. int max = i;
09. if(i < size/2 ){ 10. if(lchild<size&&a[lchild]>a[max]) max = lchild;
11. if(lchild<size&&a[rchild]>a[max]) max = rchild; 12. if(max != i){
13. swap(a[i],a[max]); 14. HeapAdjust(a,max,size); 15. } 16. } 17.} 18.void BuildHeap(std::vector<int> &a,int k){ 19. for (int i = k-1; i >= 0; --i) 20. { 21. HeapAdjust(a,i,k); 22. } 23.} 24.int main(int argc, char const *argv[]) 25.{ 26. std::vector<int> a(6); 27. a[0] = 3;a[1] = 11; a[2] = 8;a[3] = 2; 28. a[4] = 9;a[5] = 4; 29. int k = 3;//取前k最小的 30. BuildHeap(a,k); 31. for (int i = k; i < a.size(); ++i) 32. { 33. if(a[0] > a[i]) { 34. swap(a[0],a[i]); 35. HeapAdjust(a,0,k); 36. } 37. } 38. for (int i = 0; i < k; ++i) 39. { 40. cout<<a[i]<<"\t"; 41. } 42. return 0; 43.}
堆排序中求前K个最小数
最新推荐文章于 2020-12-07 21:11:53 发布