您的位置:首页 > 产品设计 > UI/UE

HeapSort

2012-06-28 00:13 330 查看
//heapsort

#include <iostream>

#include <stdio.h>

using namespace std;

int length, heapsize;

void MAX_heapify(int p, int *heap)

{

 int q = p<<1;

 int largest = p;

 while(q <= heapsize)

 {

  if(heap[q] > heap[p])

   largest = q;

  if(q+1 <= heapsize && heap[q+1] > heap[largest])

   largest = q+1;

  if(largest != p)

  {

      int t;

   t = heap[largest];

   heap[largest] = heap[p];

   heap[p] = t;

            p = largest;

      q = p<<1;

  }

  else break;

 }

}

void build_MAX_heap(int *heap)

{

 int mid = heapsize / 2;

 for(int i = mid; i>= 1; i--) //not leaf nodes

  MAX_heapify(i,heap);

}

void heapsort(int *heap)

{

 build_MAX_heap(heap);

 

 for(int i = heapsize; i>= 2; i--)

 {

  int t;

  t = heap[1];

  heap[1] = heap[heapsize];

  heap[heapsize] = t;

  heapsize--;

  MAX_heapify(1, heap);

 }

}

int main()

{

 while(scanf("%d", &length)!=EOF)

 {

  heapsize = length;

  int i;

  int heap[1000] = {0};

  for(i = 1; i <= length; i++)

   cin>>heap[i];

 

  heapsort(heap);

  for(i = 1; i <= length; i++)

   cout<<heap[i]<<" ";

  cout<<endl;

 }

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  build