排序算法——堆排序算法

   堆排序算法

 堆排序算法是一个比较快速的算法,目前应用也十分广泛。

 

#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,是一个比较快速的算法(虽然比快排要差一些,但堆排序是稳定的排序算法)。

你可能感兴趣的:(排序算法——堆排序算法)