HeapSort


//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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值