Bon, donc en gros, vous prenez un tas et tirez le premier nœud dans le tas comme le premier nœud est garanti d'être le plus grand / plus petit selon le sens du tri. La chose la plus délicate est de ré-équilibrage / création du tas dans la première place.
Deux étapes ont été nécessaires pour moi de comprendre le tas de processus - tout d'abord penser à cela comme un arbre, obtenir ma tête autour de lui, puis en tournant l'arbre dans un tableau de sorte qu'il pourrait être utile.
La deuxième partie est essentiellement parcourir l'arbre en largeur d'abord, de gauche à droite à l'ajout de chaque élément dans le tableau. Si l'arbre suivant:
73
7 12
2 4 9 10
1
Serait {73,7,12,2,4,9,10,1}
La première partie se fait en deux étapes:
- Assurez-vous que chaque nœud a deux enfants (Sauf si vous n'avez pas assez de noeuds à faire comme dans l'arbre ci-dessus.
- Assurez-vous que chaque nœud est plus grand (Ou plus petit si le tri min en premier) que de ses enfants.
Donc, pour heapify une liste de numéros que vous ajoutez à chacun de le tas, puis à la suite de ces deux étapes dans l'ordre.
Pour créer mon tas ci-dessus, je vais ajouter 10 pour la première c'est le seul nœud de façon à ne rien faire.
Ajouter 12 comme il est enfant sur la gauche:
10
12
Cela satisfait 1, mais pas les 2, donc je vais les échanger autour de:
12
10
Ajouter 7 - rien à faire
12
10 7
Ajouter 73
12
10 7
73
10 < 73 ainsi le besoin de swap ceux:
12
73 7
10
12 < 73 ainsi le besoin de swap ceux:
73
12 7
10
Ajouter 2 - rien à faire
73
12 7
10 2
Ajouter 4 - rien à faire
73
12 7
10 2 4
Ajouter 9
73
12 7
10 2 4 9
7 < 9 - swap
73
12 9
10 2 4 7
Ajouter 1 - rien à faire
73
12 9
10 2 4 7
1
Nous avons notre tas :D
Maintenant, vous venez de supprimer chaque élément à partir du haut, la permutation dans le dernier élément au sommet de l'arbre, à chaque fois, puis de le ré-équilibrage de l'arbre:
Prenez 73 rebutant 1 à sa place
1
12 9
10 2 4 7
1 < 12 - donc on les échange
12
1 9
10 2 4 7
1 < 10 - afin de les échanger
12
10 9
1 2 4 7
Prendre 12 hors - remplacer par 7
7
10 9
1 2 4
7 < 10 - swap
10
7 9
1 2 4
Prendre 10 hors - remplacer par 4
4
7 9
1 2
4 < 7 - swap
7
4 9
1 2
7 < 9 - swap
9
4 7
1 2
Prendre 9 - remplacer les 2
2
4 7
1
2 < 4 - swap
4
2 7
1
4 < 7 - swap
7
2 4
1
Prendre 7 hors remplacer par 1
1
2 4
1 < 4 - swap
4
2 1
4 - remplacer par 1
1
2
1 < 2 - l'échange de
2
1
Prendre 2 - remplacer par 1
1
Prendre 1
Liste triée alto.