HeapSort.cpp

来源:互联网 发布:java怎么学 编辑:程序博客网 时间:2024/06/06 08:30
// HeapSort.cpp : 定义控制台应用程序的入口点。
//


#include "stdafx.h"
#include<iostream>
using namespace std;


void Heapify(int* A,int i,int size);
void BuildHeap(int* A,int size);
void HeapSort(int* A,int size);
int main()
{
const int size=10;
int myarray[size]={7,8,9,5,2,1,4,6,3,0};
HeapSort(myarray,9);


for(int i=0;i<size;i++)
cout<<myarray[i];
return 0;
}


void Heapify(int *A,int i,int size)
{
int large=0;
int newsize=0;
int l=i*2;
int r=i*2+1;
if(l<size&&A[l]>A[i])
large=l,newsize=size-l+1;
else
large=i;
if(r<size&&A[r]>A[large])
large=r,newsize=size-r+1;
if(large!=i)
{
int temp=A[i];
A[i]=A[large];
A[large]=temp;
Heapify(A,large,newsize);
}
}
void BuildHeap(int* A,int size)
{
for(int i=size/2;i>0;i--)
{
Heapify(A,i,size-i);
}
}
void HeapSort(int * A,int size)
{
BuildHeap(A,size);
for(int i=size;i>1;i--)
{
int temp=A[i];
A[i]=A[1];
A[1]=temp;
size--;
Heapify(A,1,size);
}
}