当前位置:   article > 正文

数据结构 最小堆_数据结构 小堆

数据结构 小堆
   堆可以进行优先队列的操作 并且复杂度可以接受 其实也可以用stl 下面就是我写的几个函数  代码不难懂 注释作用 
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <string>
  4. #include <list>
  5. #include <algorithm>
  6. #include <stdlib.h>
  7. #include <queue>
  8. #include <stack>
  9. #include <ctype.h>
  10. #include <iostream>
  11. #include <assert.h>
  12. using namespace std;
  13. int heap[10005];
  14. int heapsize=0;
  15. int ans[10006];
  16. void insert_opration(int t)//插入操作
  17. {
  18. ++heapsize;
  19. heap[heapsize]=t;
  20. int k=heapsize;
  21. while(k!=1&&heap[k]<heap[k/2])
  22. {
  23. int save=heap[k];
  24. heap[k]=heap[k/2];
  25. heap[k/2]=save;
  26. k=k/2;
  27. }
  28. }
  29. void todown(int num)//向下维护堆
  30. {
  31. int k=num;
  32. while((k*2)<=heapsize||(k*2+1)<=heapsize)
  33. {
  34. if(k*2+1>heapsize)
  35. {
  36. if(heap[k]>heap[k*2])
  37. {
  38. int save=heap[k];
  39. heap[k]=heap[2*k];
  40. heap[k*2]=save;
  41. return;
  42. }
  43. return;
  44. }
  45. else if(heap[k]>heap[k*2]||heap[k]>heap[k*2+1])
  46. {
  47. if(heap[k*2]<heap[k*2+1])
  48. {
  49. int save=heap[k];
  50. heap[k]=heap[2*k];
  51. heap[k*2]=save;
  52. k=k*2;
  53. }
  54. else
  55. {
  56. int save=heap[k*2+1];
  57. heap[2*k+1]=heap[k];
  58. heap[k]=save;
  59. k=k*2+1;
  60. }
  61. }
  62. else if(heap[k]<=heap[k*2]&&heap[k]<=heap[k*2+1])
  63. {
  64. return;
  65. }
  66. }
  67. return;
  68. }
  69. int extract_min()//提取出来最小的元素并且堆维护
  70. {
  71. int save=heap[1];
  72. heap[1]=heap[heapsize];
  73. --heapsize;
  74. todown(1);
  75. for(int i=1;i<=heapsize;i++)
  76. cout<<heap[i]<<' ';
  77. cout<<endl;
  78. return save;
  79. }
  80. int heapbuild()// 把一堆杂乱的输入变成一个最小堆 复杂度0(n)
  81. {
  82. for(int i=heapsize;i>=1;i--)
  83. {
  84. todown(i);
  85. }
  86. return 1;
  87. }
  88. void heapsort()//进行由小到大 复杂度n*logn
  89. {
  90. int cnt=heapsize;
  91. for(int i=1;i<=cnt;i++)
  92. ans[i]=extract_min();
  93. return;
  94. }
  95. int main()
  96. {
  97. int n;
  98. cin>>n;
  99. for(int i=1;i<=n;i++)
  100. {
  101. cin>>heap[i];
  102. heapsize++;
  103. }
  104. heapbuild();
  105. for(int i=1;i<=n;i++)
  106. cout<<heap[i]<<' ';
  107. cout<<endl;
  108. heapsort();
  109. for(int i=1;i<=n;i++)
  110. {
  111. cout<<ans[i]<<' ';
  112. }
  113. cout<<endl;
  114. return 0;
  115. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/707567?site
推荐阅读
相关标签
  

闽ICP备14008679号