堆排序算法
堆排序算法是一个比较快速的算法,目前应用也十分广泛。
#include<iostream>
using namespace std;
void exchange(int A[],int i,int j)//交换数据
{
int temp = A[j];
A[j] = A[i];
A[i] = temp;
}
void Max_Heap(int A[],int i,int n)//维护最大堆得性质
{
int left = 2*i+1,right=2*i+2,largest;
if(left<n && A[left]>A[i])
largest = left;
else
largest = i;
if(right<n && A[right]>A[largest])
largest = right;
if(largest!=i)
{
exchange(A,largest,i);
Max_Heap(A,largest,n);
}
}
void Build_Max_Heap(int A[],int n)//创建最大堆
{
for(int i=n/2-1;i>=0;i--)
Max_Heap(A,i,n);
}
void Heap_Sort(int A[],int n)//进行排序
{
Build_Max_Heap(A,n);
for(int i=n-1;i>0;i--)
{
exchange(A,0,i);
Max_Heap(A,0,i);
}
}
int main()
{
int a[10] = {1,8,2,16,4,14,10,9,3,7};
Heap_Sort(a,10);
for(int j=0;j<10;j++)
cout<<a[j]<<" ";
return 0;
}
堆排序的时间复杂度为nlogn,是一个比较快速的算法(虽然比快排要差一些,但堆排序是稳定的排序算法)。