Pour apprendre le tri de tas, vous devez d'abord comprendre le concept de tas. Il peut être approximatif en tant que méthode de stockage du tableau en tant qu'arbre complètement binaire. Mais il y a d'autres propriétés avec lui, qui sont similaires aux arbres de tri binaires. Il existe des différences entre le plus grand tas et le plus petit tas. de son nœud enfant. Le tri du tas utilise généralement le plus grand tas, tandis que le plus petit tas peut construire une file d'attente prioritaire. Il existe une méthode dans le tas qui est utilisée pour maintenir les propriétés du tas, qui est la méthode maxheap dans notre code ci-dessous. Array, et le deuxième paramètre consiste à ajuster le tas. Éléments valides réellement stockés dans le tas. Peut-être que la longueur du tableau est le nombre d'éléments réellement stockés dans le tas, mais pas nécessairement toutes les données dont nous avons besoin pour construire le tas maximum. L'introduction à l'algorithme dit que le sous-nœud gauche est 2xi, mais notre tableau compte à partir de 0, donc le sous-nœud gauche devient 2xi + 1. 2 est que les nœuds enfants de ces points sont tous des nœuds de feuilles, nous construisons donc un tas maximum en le triant du bas en haut. Assurez-vous que tous les nœuds de notre tas rencontrent les propriétés maximales du tas. Enfin, le tri des tas est de retirer le premier nœud, de trier à nouveau les nœuds restants, puis de retirer le nœud racine. Cela garantit que chaque fois que nous le sortons, c'est la valeur maximale.
La copie de code est la suivante:
classe publique Heapsort {
private int getleft (int i) {
retour 2 * i + 1;
}
private int getRight (int i) {
retour 2 * i + 2;
}
public void maxheap (int [] heap, int loc, int taille) {
int l = getleft (loc);
int r = getRight (loc);
int plus gros = loc;
if (l <size && tas [l]> tas [loc]) {
Le plus grand = l;
}
if (r <size && tas [r]> tas [plus grand]) {
Le plus grand = r;
}
if (le plus grand! = loc) {
int cache = tas [loc];
tas [loc] = tas [plus grand];
tas [plus grand] = cache;
Maxheap (tas, grand, taille);
}
}
public void buildheap (int [] tas) {
pour (int i = heap.length / 2; i> = 0; i -) {
MaxHeap (Heap, I, Heap.Length);
}
}
public void tri (int [] tas) {
BuildHeap (tas);
for (int i = heap.length-1; i> 1; i -) {
int cache = tas [0];
tas [0] = tas [i];
tas [i] = cache;
Maxheap (tas, 0, i);
}
int cache = tas [0];
tas [0] = tas [1];
tas [1] = cache;
}
public static void main (String [] args) {
int [] heap = new int [] {4,1,5,3,7,12,65,7};
Heapsort hs = new HeapSort ();
HS.Sort (tas);
for (int i = 0; i <heap.length; i ++) {
System.out.println (Heap [i]);
}
}
}