Maison développement back-end Tutoriel C#.Net Comment écrire un algorithme de tri par tas en utilisant C#

Comment écrire un algorithme de tri par tas en utilisant C#

Sep 19, 2023 am 08:45 AM
编写 c# 堆排序

Comment écrire un algorithme de tri par tas en utilisant C#

Comment utiliser C# pour écrire un algorithme de tri de tas

Heap Sort est un algorithme de tri basé sur un tas binaire complet, et sa complexité temporelle est O(nlogn). Dans cet article, nous allons écrire l'algorithme de tri par tas en utilisant C# et fournir des exemples de code détaillés.

  1. Construire un tas

Dans l'algorithme de tri des tas, vous devez d'abord créer un tas maximum (ou un tas min). La propriété du tas max est que la valeur du nœud parent est supérieure ou égale à la valeur de son nœud enfant, alors que l'inverse est vrai pour le tas min.

Afin de construire un tas maximum, nous pouvons utiliser un tableau pour représenter le tas. Les nœuds du tas sont disposés par ordre hiérarchique. Étant donné un index de nœud i, nous pouvons trouver l'index de ses nœuds parent et enfant par :

  • Indice du nœud parent = (i - 1) / 2
  • Indice du nœud enfant gauche = 2 * i + 1
  • Nœud enfant droit index = 2 * i + 2

En utilisant ces indices, nous pouvons facilement nous déplacer dans le tas et pousser les grands (ou petits) éléments vers le haut du tas.

Voici un exemple de code pour implémenter le tas max en utilisant C# :

public void BuildMaxHeap(int[] arr, int n, int i)
{
    int largest = i; // 初始化最大元素的索引
    int left = 2 * i + 1; // 左子节点索引
    int right = 2 * i + 2; // 右子节点索引

    // 如果左子节点比父节点大,更新最大元素的索引
    if (left < n && arr[left] > arr[largest])
    {
        largest = left;
    }

    // 如果右子节点比父节点大,更新最大元素的索引
    if (right < n && arr[right] > arr[largest])
    {
        largest = right;
    }

    // 如果最大元素的索引不是父节点的索引,交换父节点和最大元素
    if (largest != i)
    {
        int temp = arr[i];
        arr[i] = arr[largest];
        arr[largest] = temp;

        // 递归地建立最大堆
        BuildMaxHeap(arr, n, largest);
    }
}
Copier après la connexion
  1. Tri du tas

Après avoir construit le tas max, nous pouvons utiliser l'algorithme de tri par tas pour trier le tableau. L'idée du tri par tas est de permuter continuellement le plus grand élément vers la fin du tableau et de réduire la plage du tableau à trier. Les étapes spécifiques sont les suivantes :

  • Construisez le tas maximum
  • Échangez l'élément supérieur et le dernier élément du tas
  • Réajustez le tas
  • Répétez les étapes ci-dessus jusqu'à ce qu'il ne reste qu'un seul élément dans le tableau à trier

Ce qui suit est un tri par tas utilisant un exemple de code C# pour :

public void HeapSort(int[] arr)
{
    int n = arr.Length;

    // 构建最大堆
    for (int i = n / 2 - 1; i >= 0; i--)
    {
        BuildMaxHeap(arr, n, i);
    }

    // 交换堆顶元素和末尾元素,并重建最大堆
    for (int i = n - 1; i > 0; i--)
    {
        int temp = arr[0];
        arr[0] = arr[i];
        arr[i] = temp;

        BuildMaxHeap(arr, i, 0);
    }
}
Copier après la connexion
  1. Code de test

Pour vérifier que notre algorithme de tri par tas est correct, nous pouvons écrire du code de test qui trie un tableau généré aléatoirement et affiche les résultats pour vérification. Voici un exemple de code de test de tri par tas écrit en C# :

int[] arr = { 12, 11, 13, 5, 6, 7 };
HeapSort(arr);

Console.WriteLine("排序后的数组:");
foreach (var element in arr)
{
    Console.Write(element + " ");
}
Copier après la connexion
  1. Résumé

Grâce aux étapes ci-dessus, nous avons écrit avec succès un algorithme de tri par tas en utilisant C# et fourni des exemples de code détaillés. Le tri par tas est un algorithme de tri efficace qui offre de bonnes performances dans la plupart des cas. J'espère que cet article vous aidera à comprendre et à implémenter l'algorithme de 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 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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Dead Rails - Comment apprivoiser les loups
4 Il y a quelques semaines By DDD
Niveaux de force pour chaque ennemi et monstre de R.E.P.O.
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
<🎜>: Grow A Garden - Guide de mutation complet
2 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1655
14
Tutoriel PHP
1253
29
Tutoriel C#
1228
24
Active Directory avec C# Active Directory avec C# Sep 03, 2024 pm 03:33 PM

Guide d'Active Directory avec C#. Nous discutons ici de l'introduction et du fonctionnement d'Active Directory en C# ainsi que de la syntaxe et de l'exemple.

Sérialisation C# Sérialisation C# Sep 03, 2024 pm 03:30 PM

Guide de sérialisation C#. Nous discutons ici de l'introduction, des étapes de l'objet de sérialisation C#, du fonctionnement et de l'exemple respectivement.

Générateur de nombres aléatoires en C# Générateur de nombres aléatoires en C# Sep 03, 2024 pm 03:34 PM

Guide du générateur de nombres aléatoires en C#. Nous discutons ici du fonctionnement du générateur de nombres aléatoires, du concept de nombres pseudo-aléatoires et sécurisés.

Vue Grille de données C# Vue Grille de données C# Sep 03, 2024 pm 03:32 PM

Guide de la vue Grille de données C#. Nous discutons ici des exemples de la façon dont une vue de grille de données peut être chargée et exportée à partir de la base de données SQL ou d'un fichier Excel.

Factorielle en C# Factorielle en C# Sep 03, 2024 pm 03:34 PM

Guide de Factorial en C#. Nous discutons ici de l'introduction de factorial en c# ainsi que de différents exemples et de l'implémentation du code.

La différence entre le multithreading et le C # asynchrone La différence entre le multithreading et le C # asynchrone Apr 03, 2025 pm 02:57 PM

La différence entre le multithreading et l'asynchrone est que le multithreading exécute plusieurs threads en même temps, tandis que les opérations effectuent de manière asynchrone sans bloquer le thread actuel. Le multithreading est utilisé pour les tâches à forte intensité de calcul, tandis que de manière asynchrone est utilisée pour l'interaction utilisateur. L'avantage du multi-threading est d'améliorer les performances informatiques, tandis que l'avantage des asynchrones est de ne pas bloquer les threads d'interface utilisateur. Le choix du multithreading ou asynchrone dépend de la nature de la tâche: les tâches à forte intensité de calcul utilisent le multithreading, les tâches qui interagissent avec les ressources externes et doivent maintenir la réactivité de l'interface utilisateur à utiliser asynchrone.

Modèles en C# Modèles en C# Sep 03, 2024 pm 03:33 PM

Guide des modèles en C#. Nous discutons ici de l'introduction et des 3 principaux types de modèles en C# ainsi que de ses exemples et de l'implémentation du code.

Nombres premiers en C# Nombres premiers en C# Sep 03, 2024 pm 03:35 PM

Guide des nombres premiers en C#. Nous discutons ici de l'introduction et des exemples de nombres premiers en c# ainsi que de l'implémentation du code.

See all articles