Structures de données et algorithmes

Quel algorithme de tri a une complexité temporelle en O(n log n) même dans le pire cas et trie presque sans mémoire supplémentaire, comme un tableau de travail ?

  1. ALe tri fusion
  2. BLe tri par tas
  3. CLe tri rapide
Afficher la réponse et l'explication

Réponse : B. Le tri par tas

Le tri par tas construit un tas binaire dans le tableau, puis échange de façon répétée le maximum situé à la racine avec le dernier élément et réduit le tas : il s'exécute en O(n log n) même dans le pire cas et ne demande qu'une quantité constante de mémoire supplémentaire. Le tri fusion est lui aussi en O(n log n) dans le pire cas, mais sur un tableau il demande une zone de travail proportionnelle à n. Le tri rapide est en O(n log n) en moyenne et rapide en pratique, mais selon le choix du pivot et les données, il peut se dégrader en O(n²). Notez que le tri par tas compare des éléments éloignés, ce qui nuit à son efficacité de cache, et qu'il n'est pas stable non plus.

S'entraîner sur ce thème Retour au thème

Autres questions sur Structures de données et algorithmes

  1. Les enregistrements (nom, note) (A, 80), (B, 70), (C, 80), (D, 70) sont dans cet ordre. Si on les trie par note croissante avec un tri stable, dans quel ordre les noms apparaissent-ils ?
  2. Quel est le cas typique dans lequel la complexité temporelle du tri rapide devient O(n²) ?
  3. Dans le tri fusion, on fusionne les deux séquences triées 1, 4, 7, 9 et 2, 3, 8, 10 en une seule en comparant de façon répétée leurs éléments de tête et en sortant le plus petit. Quand une séquence est vide, le reste de l'autre est sorti sans comparaison. Combien de comparaisons sont effectuées ?
  4. Un tas binaire est stocké dans un tableau a[0], a[1], a[2], … avec la racine en a[0], en remplissant chaque niveau de gauche à droite à partir du haut. Quels sont les enfants et le parent de a[4] ?
  5. Un tas max, dans lequel la valeur de chaque parent est supérieure ou égale à celles de ses enfants, est stocké dans un tableau avec la racine en a[0]. On ajoute 45 au tas 50, 30, 40, 10, 20, 35 en le plaçant à la fin, puis en l'échangeant avec son parent tant qu'il est plus grand que celui-ci. Quel est le tableau obtenu ?