Maison >interface Web >js tutoriel >Explication détaillée de l'algorithme d'implémentation du tri rapide dans les compétences Javascript_javascript

Explication détaillée de l'algorithme d'implémentation du tri rapide dans les compétences Javascript_javascript

WBOY
WBOYoriginal
2016-05-16 15:40:431084parcourir

Actuellement, il existe environ sept ou huit algorithmes de tri les plus courants, parmi lesquels « Quicksort » est le plus largement utilisé et le plus rapide. Il a été proposé par C. A. R. Hoare (1934--), lauréat du prix Turing, en 1960.

L'idée du « tri rapide » est très simple L'ensemble du processus de tri ne nécessite que trois étapes :

(1) Dans l'ensemble de données, sélectionnez un élément comme "pivot".

(2) Tous les éléments plus petits que « base » sont déplacés vers la gauche de « base » ; tous les éléments plus grands que « base » sont déplacés vers la droite de « base ».

(3) Répétez les première et deuxième étapes pour les deux sous-ensembles à gauche et à droite de la "ligne de base" jusqu'à ce qu'il ne reste qu'un seul élément dans tous les sous-ensembles.

Par exemple, il existe un ensemble de données {85, 24, 63, 45, 17, 31, 96, 50}. Comment le trier ?

La première étape consiste à sélectionner l'élément central 45 comme "ligne de base". (La valeur de base peut être choisie arbitrairement, mais choisir une valeur intermédiaire est plus facile à comprendre.)

La deuxième étape consiste à comparer chaque élément avec la "baseline" afin de former deux sous-ensembles, l'un "inférieur à 45" et l'autre "supérieur ou égal à 45".

La troisième étape consiste à répéter les première et deuxième étapes pour les deux sous-ensembles jusqu'à ce qu'il ne reste qu'un seul élément dans tous les sous-ensembles.

Ce qui suit fait référence aux informations sur Internet et utilise le langage Javascript pour implémenter l'algorithme ci-dessus.

Tout d'abord, définissez une fonction quickSort dont le paramètre est un tableau.

var quickSort = function(arr) {
};

Ensuite, vérifiez le nombre d'éléments dans le tableau, et s'il est inférieur ou égal à 1, renvoyez-le.

var quickSort = function(arr) {
  if (arr.length <= 1) { return arr; }
};

Ensuite, sélectionnez le "pivot" et séparez-le du tableau d'origine, puis définissez deux tableaux vides pour stocker deux sous-ensembles, un à gauche et un à droite.

var quickSort = function(arr) {
  if (arr.length <= 1) { return arr; }
  var pivotIndex = Math.floor(arr.length / 2) ;
  var pivot = arr.splice(pivotIndex, 1)[0];
  var left = [];
  var right = [];
};

Ensuite, commencez à parcourir le tableau, en plaçant les éléments plus petits que la « ligne de base » dans le sous-ensemble de gauche et les éléments plus grands que la « ligne de base » dans le sous-ensemble de droite.

var quickSort = function(arr) {
  if (arr.length <= 1) { return arr; }
  var pivotIndex = Math.floor(arr.length / 2) ;
  var pivot = arr.splice(pivotIndex, 1)[0];
  var left = [];
  var right = [];
  for (var i = 0; i < arr.length; i++){
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
};

Enfin, utilisez la récursivité pour répéter ce processus afin d'obtenir le tableau trié.

var quickSort = function(arr) {
  if (arr.length <= 1) { return arr; }
  var pivotIndex = Math.floor(arr.length / 2);
  var pivot = arr.splice(pivotIndex, 1);
  var left = [];
  var right = [];
  for (var i = 0; i < arr.length; i++){
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat(pivot, quickSort(right));
};
 
var dataArray = [85,24,63,45,17,31,96,50];
console.log(dataArray.join(","));
console.log(quickSort(dataArray).join(","));

J'espère que cet article sera utile à la conception de la programmation JavaScript de chacun.

Déclaration:
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