Je ne faisais rien pour cet algorithme, et mon nom ne devrait pas apparaître dans le nom de l'algorithme. ---- Hill (tri shell Auteur)
Colline colline sont classifiées par le concepteur (Donald Shell) Nommé d'après l'algorithme est constitué de 1959 publié . Certaines anciennes versions de manuels scolaires et des manuels de référence à l'algorithme nommé Shell-Metzner, à savoir contenant le nom de Marlene, Norton Metzner Toutefois, selon Metzner je dis: « Je ne faisais rien pour cet algorithme, et mon nom ne doit pas apparaître dans le nom de l'algorithme. »
---- célébrité que le temps plus que modeste.
La première définition
Trier Shell , Également connu en tant que descendant incrémentale algorithme de tri est insertion Trier Une version plus efficace et améliorée. tri colline algorithme de tri non stationnaire.
Shell genre est basé sur insertion Trier Les deux propriétés suivantes proposées ** méthode améliorée de:
1. Lorsque l'opération de tri par insertion de données presque triée, une efficacité élevée, à savoir l'efficacité de séquençage linéaire peut être obtenue
2. Cependant, l'insertion est généralement inefficace, car sorte genre d'insertion ne peut déplacer des données d'un bit.
Deuxième: trier d'insertion
Comme il est mentionné dans le insertion Trier , Dans ce premier regard sur le tri par insertion, il fonctionne est En construisant une séquence ordonnée, pour les données non triés, à partir d'un balayage vers l'avant dans la séquence triée, et de trouver les positions d'insertion correspondantes.
Dire qu'une image vaut mille mots à une opinion personnelle graphique plus facile à comprendre:
Un article de Wikipédia - tri par insertion
Pour expliquer la figure:
1. Démarrez du premier élément, l'élément peut être considéré comme ayant été triés;
2. Enlever l'élément suivant, en comparaison avec les éléments avant, jusqu'à ce qu'il trouve un plus grand nombre de ou égal à celui de la butée avant, se déplacer en arrière comparaison numérique vol;
3. Le nouvel élément est inséré dans cette position,
OC directement sur le code, à suivre comme une sorte Hill github:
/ **
* Tri d'insertion
* / - (void) algorithm_InsertSortWith: (NSMutableArray *) {tableau
// Le premier numéro de référence, de sorte que i 1 à partir de
pour (int i = 1; i < array.count; i ++) {// chiffres à localiser
= Int temp // sont un contraste de début à la dernière fois de la pré-positionnement des bons chiffres, en regardant droit devant jusqu'à ce que vous trouver un emplacement approprié < Supérieur ou égal devant ce nombre > ,
for (int j = i - 1, j > = 0 && Temp < ; j -) {// n'a pas tous les chiffres sont déplacés vers l'arrière
tableau = Array // il sera finalement déterminer l'emplacement d'un convertisseur numérique qualifié
tableau = ;
}
}
NSLog (@ "après l'ordre du tableau:% @", tableau);
}
La troisième analyse
Ou Colline de tri raison de le produire,
1. Lorsque l'opération de tri d'insertion de données presque triées, rendement élevé, à savoir, l'efficacité de la commande linéaire peut être atteint;
2. Cependant, l'insertion est généralement inefficace, car sorte genre d'insertion ne peut déplacer des données d'un bit.
Principalement le temps et la complexité de O (n²) passent par, il est de vous voir ne pas plaire à l'il.
Chat sont inséparables GIF, comment peut-moins ici! Figure sentir dans les prédécesseurs GIF souffle Niubi!
Trier Shell par comparaison tous les éléments Divisé en plusieurs zones pour améliorer Insérer type de performance . C'est: la zone de données peut être divisée en un tableau à deux dimensions, Chaque zone a Et puis trier chaque colonne.
Reste tableau trié --- , La première étape est réglée à 3, voir étape ultérieure
Un exemple d'un
Le premier groupe < Étape 3 == > Les données brutes
9, 1, 5
8, 3, 7
4, 6, 2
Après le premier ordre de ;
4, 1, 2
8, 3, 5
9, 6, 7
Le deuxième groupe < Étape 2 == > Les données brutes ;
4, 1
2, 8
3, 5
9, 6
7
Après le deuxième ordre de ;
2, 1
3, 5
4, 6
7, 8
9
Après la troisième étape == 1 paquet, afin de
Des exemples de l'dicarboxylique
Afficher plus d'étapes sous la forme d'une image:
calcul étape clé ---
Par le type d'insertion ci-dessus et Trier Shell Exemple, doit trier la colline ont une compréhension préliminaire, mais mesures Cette chose est complètement floue .... rassurez-vous;
parce que sélection de la taille de l'étape est une partie importante de sorte Shell Alors, choisissez des instructions séparées, de la proposition initiale est Binaire et binaire connaître les dernières étapes de 1 < C'est, une sorte d'insertion > Mais avec une taille plus petite étape lors de la commande, avant les grandes étapes avec des restes ordonnés. Si un certain nombre de colonnes sont classifiées dans les étapes 5 et ensuite à l'étape 3 à trier, alors non seulement le nombre de colonnes à l'étape 3 et ordonnée, et l'étape 5 est ordonnée. Sinon, l'algorithme dans un processus itératif va perturber l'ordre précédent, il ne serait pas en si peu de temps pour terminer le séquençage. Extrait de l'Encyclopédie wiki
La meilleure séquence connue des étapes proposées par Sedgewick ** 1,5,19,41,109, ... **
Il est obtenu à partir de deux séquence entrelacée d'éléments: < Formule: 9 (4 K - 2 K) + 1, et 2 K + 2 (2 + K 2 - 3) + 1 >
1,19,109,505,2161, ... ..., 9 || (4 K - 2 K) + 1, K = 0,1,2,3, ...
5,41,209,929,3905, ... .. || 2 + K 2 (2 + K 2 - 3) + 1, K = 0,1,2,3, ...
L'étude montre également que « comparaison de Shell est en quelque sorte la plus importante opération, pas d'échange. » Colline trier par cette séquence d'étapes plus rapides que l'insertion sorte, plus encore que le tri rapide et tas tri dans un petit tableau aussi rapide, mais plus lent que le tri ou la colline commande rapide en matière de grandes quantités de données. Peut se référer tri Algorithmes - ShellSort
OC Colline code de tri
- (void) algorithm_shellSortWith: array (NSMutableArray *) {
// longueur totale
int n = (int) array.count; // pour déterminer la longueur de boucle du numéro de l'étape la plus extérieure ---- < 1 est égal à étages binaires jusqu'à ce que >
for (int gap = n / 2; écart > 0; intervalle / = 2) {
NSLog (@ "step ----% d", gap); // dans la détermination d'une étape après un intervalle de nombres.
pour (int i = écart; i < n; i ++) {
NSLog (@ "% d de bits du premier comparateur de bit% d", i - écart, i); // trouver une paire de l'avant, Analyse < Dès le premier démarrage > < croissant décroissant > , J - = écart, sort au sein du groupe
for (int j = i - écart; j > = 0 && réseau > tableau ; J - = écart) {
! // position de change
;
}
}
}
NSLog (@ "----% @", tableau);
}
Avait bien rangé dans .....
Plus de contenu passionnant s'il vous plaît attention à "IT Alliance de combat" Oh ~ ~ ~