Caractéristiques de l'algorithme:
1. Tri instable
2. Ne peut être utilisé que pour la structure séquentielle, pas pour la structure en chaîne
3. Le nombre de comparaisons requises pour la construction initiale de pieux est grand, donc le nombre d'enregistrements est petit et ne doit pas être utilisé. Dans le pire des cas, la complexité temporelle du tri par tas est O (nlogn), ce qui est un avantage par rapport à O (n * n) du tri rapide. Il est plus efficace lorsqu'il y a plus d'enregistrements.
#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;
}