最大堆的构建。

原创 2013年12月02日 11:16:17
在优先队列中我们会看到最大堆。
最大堆的原理是:除了根结点外的所有结点都要满足,小于父结点。
构建最大堆的过程如下:
#include <iostream>

#include <cmath>

#define mx 50

using namespace std;

int a[mx] ;

int n ;

void adjust(int i)
{
  int child ;

  while(i <= n / 2)
  {
   child = 2 * i ;
   if(child + 1 <= n && a[child] < a[child + 1])
    child ++ ;
   if(a[i] < a[child])
    swap(a[i] , a[child]) ;
   else
     return ;
   i = child ;
  }

}

int main()
{
 while(cin >>n)
 {
  for(int i = 1; i <= n; i ++)
   cin >> a[i] ;
   for(int i = 1; i <= n; i ++)
    cout << a[i] << " ";
   cout << endl;
  for(int i = n / 2; i >= 1; i --)
    adjust(i) ;

  cout <<"----" << endl ;
  for(int i = 1; i <=n ; i ++)
   cout << a[i] << " ";
  cout << endl;
 }
 return  0 ;
}

相关文章推荐

最大堆的构建以及删除操作

  • 2015年12月03日 16:53
  • 2KB
  • 下载

堆排序最大堆【算法导论】

  • 2014年01月08日 20:21
  • 250KB
  • 下载

堆排序原理及算法实现(最大堆)

堆排序        堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。 1.堆   堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:   Key[i]=Key[2i+1]&&ke...

算法入门--堆排序(最大堆,从小到大排序)

#include #include /*由于不会动态获得当前堆的元素数量heap_size,所以暂时用传参的方法,但是当多次运行后发现 为了防止错误应该把heap_size设置为全局变量,主函数初...

数据结构 最大堆

  • 2016年05月29日 12:47
  • 5KB
  • 下载

二叉堆:最大堆

  • 2014年07月08日 17:15
  • 5KB
  • 下载

最大堆的插入/删除/调整/排序操作

转自:http://www.java3z.com/cwbwebhome/article/article1/1362.html?id=4745 堆有最大堆和最小堆之分,最大堆就是每个结点的值都>=其左...

最大堆实现knn

  • 2016年07月07日 20:10
  • 30KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:最大堆的构建。
举报原因:
原因补充:

(最多只允许输入30个字)