Implémentation du langage C de tri de tas

Insérez la description de l'image ici

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;
}

Je suppose que tu aimes

Origine blog.csdn.net/changbaishannefu/article/details/111596428
conseillé
Classement