Maison  >  Article  >  Java  >  Qu’est-ce que le tri par tas en Java ? Introduction au tri par tas

Qu’est-ce que le tri par tas en Java ? Introduction au tri par tas

青灯夜游
青灯夜游avant
2018-10-22 17:59:563145parcourir

Le contenu de cet article est : Qu'est-ce que le tri par tas en Java ? Introduction au tri par tas. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

  • Introduction au tri en tas :
    Le tri en tas peut être divisé en deux étapes. Dans la phase de construction du tas, nous réorganisons le tableau d'origine en un tas ; puis dans la phase de tri descendant, nous supprimons tous les éléments du tas dans l'ordre et obtenons le résultat trié.
    1. Construction du tas, une méthode efficace consiste à utiliser la fonction de descente Sink() de droite à gauche pour construire le sous-tas. Chaque position du tableau a un nœud racine d'un sous-tas, et Sink() est également applicable à ces sous-tas. Si les deux nœuds enfants d'un nœud sont déjà dans le tas, alors l'appel de la méthode Sink() est activé. le nœud peut les enregistrer combinés en un tas. Nous pouvons ignorer le sous-tas de taille 1, car le sous-tas de taille 1 ne nécessite pas de puits (), c'est-à-dire une opération de naufrage. Pour les opérations de naufrage et de flottement, veuillez vous référer à l'article sur la file d'attente prioritaire que j'ai écrit.
    2. Pour trier le tas, nous construisons un tas via la première étape. Dans ce tas, le nœud racine est toujours le nœud avec la valeur maximale, nous échangeons donc la valeur du nœud racine avec la dernière valeur du tas. array. Dans Utilisez simplement Sink() Sinking pour maintenir la structure du tas.

  • Implémentation de code spécifique :

public class PQSort{
	public static void main(String[] args){
		int[] a = {9,1,7,5,3,9,12,56,21,45};
		sort(a);
		for(int i=0;i<a.length system.out.print public int for>=0;k--){
				sink(a,k,N);
			}
			//通过不断把堆中最大值放到数组的后面来排序
			while(N>0){
				exch(a,0,N--);
				sink(a,0,N);
			}
	}
	//下沉函数
	private static void sink(int[] a, int i, int n){
		while(2*i+1a[j]) break;
			exch(a,i,j);
			i=j;
		}
	}
	//交换函数
	private static void exch(int[] a, int i, int j){
		int temp = a[i];
		a[i] = a[j];
		a[j] = temp;
	}
}</a.length>

Résultats d'exécution :

Qu’est-ce que le tri par tas en Java ? Introduction au tri par tas

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer