您的位置:首页 > 其它

堆排序

2010-11-17 17:09 176 查看
#include <iostream>
using namespace std;
int heap_size;
int length;
//左孩子
int Left(int i)
{
return 2*i+1;
}
//右孩子
int Right(int i)
{
if(2*(i+1) <= length -1)
{
return 2*(i+1);
}
else
{
return -1;
}
}
//交换两个值
void swap(int &a, int &b)
{
int c = a;
a = b;
b = c;
}
void Max_Heapify(int *A,int i)
{
int l = Left(i);
int r = Right(i);
int largest = i;
if(l <= heap_size && A[l] > A[i])
{
largest = l;
}
if(r != -1 && r <= heap_size && A[r]>A[largest])
{
largest = r;
}
if(largest != i)
{
swap(A[i],A[largest]);
Max_Heapify(A,largest);
}
}
//建堆
void Build_Max_Heap(int *A)
{
for(int i=length/2; i >= 0; i--)
{
Max_Heapify(A,i);
}
}
//堆排序
void Heap_Sort(int *A)
{
Build_Max_Heap(A);
for(int i = length-1;i >=0; i--)
{
swap(A[0],A[i]);
heap_size --;
Max_Heapify(A,0);
}
}
void printArray(int *A)
{
for(int i = 0; i < length; ++i)
{
cout << A[i] <<" ";
}
}
int main()
{
int array[]={16,14,10,8,7,9,3,2,4,1};
length = sizeof(array)/sizeof(int);
heap_size = length-1;
Heap_Sort(array);
printArray(array);
cout <<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: