Maison > Java > javaDidacticiel > le corps du texte

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

青灯夜游
Libérer: 2018-10-22 17:59:56
avant
3141 Les gens l'ont consulté

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>
Copier après la connexion

Résultats d'exécution :

Quest-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!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!