堆排序算法是一个比较快速的算法,目前应用也十分广泛。
#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,是一个比较快速的算法(虽然比快排要差一些,但堆排序是稳定的排序算法)。