算法特点:
1.不稳定排序
2.只能用于顺序结构,不能用于链式结构
3.初始建堆所需比较次数较多,因此记录数较少不宜采用。堆排序在最坏情况下时间复杂度为O(nlogn)相对于快速排序的O(n*n)而言是一个优点,当记录比较多时较为高效。
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
void HeapAdjust(int *a,int s,int length){
int t=a[s];
for(int i=2*s;i<=length;i=i*2){
if(i+1<=length&&a[i]<a[i+1]) i=i+1;
if(t>a[i]) break;
a[s]=a[i];s=i;
}
a[s]=t;
}
void CreatHead(int *a,int x){
for(int i=x/2;i>0;i--)
HeapAdjust(a,i,x);
}
void HeapSort(int *a,int length){
CreatHead(a,length);
for(int i=length;i>1;i--){
int x=a[1];
a[1]=a[i];
a[i]=x;
HeapAdjust(a,1,i-1);
}
}
int main()
{
int a[9]={
0,49,38,65,97,76,13,27,49};
HeapSort(a,8);
for(int i=1;i<=8;i++)
cout<<a[i]<<" ";
//cout << "Hello world!" << endl;
return 0;
}