7.4 堆排序
C++ Codes:
template<class T>
void HeapSort(T vec[], int length)
{
for(int i=0;i<length;++i)
{
for(int j=length-1-i;j>0;--j)
{
if(vec[j]>vec[(j-1)/2])
{
T val=vec[j];
vec[j]=vec[(j-1)/2];
vec[(j-1)/2]=val;
}
}
T val=vec[0];
vec[0]=vec[length-1-i];
vec[length-1-i]=val;
}
}
Python Codes:
def HeapSort(arr):
for i in range(0,len(arr)):
for j in range(len(arr)-1-i,0,-1):
if(arr[j]>arr[(j-1)/2]):
val=arr[j]
arr[j]=arr[(j-1)/2]
arr[(j-1)/2]=val
val=arr[0]
arr[0]=arr[len(arr)-1-i]
arr[len(arr)-1-i]=val
堆排序思想是把待排序的记录构成一个完全二叉树,找出其中最大(或最小)的记录。
堆排序算法的时间复杂度就是O(nlog2 n)。