#include <iostream>
#include <cstdlib>
using namespace std;
void HeapiFy(int A[],int length ,int i);
void BuildHeap (int A[],int length);
void HeapSort(int A[],int length);
void HeapiFy(int A[],int length ,int i)
{
int left = i*2;
int right = i*2+1;
int largest = i;
if (left<= length && A[largest] < A[left])
{
largest = left;
}
if (right<= length && A[largest] < A[right])
{
largest = right;
}
if (i != largest)
{
int temp = A[largest];
A[largest] = A[i];
A[i] = temp;
HeapiFy(A,length,largest);
}
}
void BuildHeap(int A[],int length)
{
for (int i = length/2 ;i >= 1;i--)
{
HeapiFy(A,length,i);
}
}
void HeapSort(int A[],int length)
{
BuildHeap(A,length);
for (int i = length;i>=2;i--)
{
int temp = A[i];
A[i] = A[1];
A[1] = temp;
HeapiFy(A,i-1,1);
}
}
int main(){
int A[] = {0,100,98,1,6,8,10};
HeapSort(A ,6);
for(int i = 1; i < 7; i++)
cout<<A[i]<<" ";
cout<<endl;
return 0 ;
}
【算法導論】 堆排序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.