1. Qu'est-ce que le tri Hill ?
Le tri Hill, également appelé tri incrémentiel réduit, est une implémentation à haute efficacité du tri par insertion. Étant donné que le tri par insertion est inefficace lors du traitement de données à grande échelle, le tri Hill élargit l'intervalle de tri par insertion en divisant la séquence et en effectuant le tri par insertion séparément, réduisant ainsi le nombre d'éléments mobiles et améliorant l'efficacité du tri.
2. L'idée de base du tri Hill
L'idée de tri utilisée par le tri Hill peut être comprise comme l'insertion et le tri de plusieurs sous-séquences séparées par h. Utilisez un h plus petit pour diviser à chaque fois. Une fois que chaque sous-séquence est insérée et triée, modifiez la valeur de h et divisez à nouveau la séquence jusqu'à ce que h = 1 à la fin pour terminer le tri.
3. PHP implémente le tri Hill
Ce qui suit est l'implémentation du code PHP du tri Hill :
function shellSort($arr) { $length = count($arr); // 初始时gap最大,按照插入排序的方式进行排序 for ($gap = floor($length / 2); $gap > 0; $gap = floor($gap / 2)) { for ($i = $gap; $i < $length; $i++) { $j = $i; while ($j - $gap >= 0 && $arr[$j] < $arr[$j - $gap]) { // 插入排序 $tmp = $arr[$j]; $arr[$j] = $arr[$j - $gap]; $arr[$j - $gap] = $tmp; $j -= $gap; } } } return $arr; }
Le code ci-dessus utilise deux niveaux de boucles. Le premier niveau de boucle utilise la variable $gap pour diviser le tableau et le trier. . Le deuxième niveau de boucle utilise la variable $gap pour diviser le tableau et le trier et déplacer les éléments dans une boucle. La complexité temporelle de la boucle à deux niveaux est $O(n^2)$.
4. Complexité temporelle du tri Hill
Sous différentes séquences, la complexité temporelle du tri Hill est également différente. La complexité temporelle du tri Hill est $O(n logn)$ dans le meilleur des cas, $O(n^2)$ dans le pire des cas et $O(n log^2n)$ dans le cas moyen.
5. Avantages et inconvénients du tri Hill
Avantages :
Inconvénients :
6. Résumé
Le tri Hill est une version efficace du tri par insertion. En introduisant le concept d'intervalle, il réduit le nombre de comparaisons et de déplacements d'éléments, améliorant ainsi l'efficacité du tri. La complexité temporelle du tri Hill est affectée par la séquence et il est difficile de mener une analyse précise. Par conséquent, lors du codage réel, il est nécessaire de sélectionner une séquence d’intervalles appropriée en fonction de la taille et des caractéristiques des données pour obtenir un effet de tri optimal.
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!