Heim  >  Artikel  >  Web-Frontend  >  JS implementiert die Hill-Sortierung

JS implementiert die Hill-Sortierung

不言
不言Original
2018-07-07 17:39:451823Durchsuche

Dieser Artikel stellt hauptsächlich die Implementierung der Hill-Sortierung in JS vor, die einen gewissen Referenzwert hat. Jetzt können Freunde in Not darauf verweisen.

Hill-Sortierung ist im Wesentlichen eine Einfügungssortierung. Die Sequenz wird jedoch in gleichen Abständen gruppiert und in jeder Gruppe wird eine Einfügungssortierung durchgeführt. Diese Optimierung reduziert die ursprüngliche Zeitkomplexität von O(n^2) auf O(nlogn).

Grundidee

Hill-Sortierung besteht darin, die Arrays in bestimmten Intervallen zu gruppieren und dann in jeder Gruppe eine Einfügungssortierung durchzuführen. Anschließend wird das Intervall schrittweise verringert und in jeder Gruppierung eine Einfügungssortierung durchgeführt ... bis Das Intervall ist gleich 1. Führen Sie eine Einfügungssortierung und ein Ende durch.

Dann stellt sich die Frage, wie groß sollte das Intervall sein und wie kann man es reduzieren? Normalerweise nehmen wir das anfängliche Intervall als die Hälfte der Länge der Sequenz an: Lücke = Länge/2 und reduzieren es in der Form Lücke = Lücke/2. Der gesamte Prozess wird unten im Detail dargestellt.

Das ursprüngliche Array-Array lautet wie folgt:

JS implementiert die Hill-Sortierung


Nehmen Sie zunächst das Intervall als Lücke = Länge/2 = 4 und teilen Sie das Array in 4 Gruppen wie folgt: Implementieren Sie die Einfügungssortierung für jede Gruppe:

JS implementiert die Hill-Sortierung


Bei der ersten Sortierung werden die kleineren Elemente jeder Gruppe an eine relativ vordere Position verschoben (dies Zustand kann als n-sortiert bezeichnet werden, d. h. Gruppierung mit n als Lücke und geordnet). Fahren Sie dann mit der Gruppierung fort, Lücke = Lücke/2 = 2, und implementieren Sie die Einfügungssortierung für jede Gruppe:

JS implementiert die Hill-Sortierung


Fahren Sie mit der Gruppierung des Arrays fort, Lücke = Lücke/2 = 1Das heißt, alle Elemente bilden eine Gruppe und der Einfügungssortierungsalgorithmus ist abgeschlossen:

JS implementiert die Hill-Sortierung

JS implementiert die Hill-Sortierung

Code-Implementierung

Verwendung der inneren Schleife Die Einfügungssortierung ist im Grunde die gleiche wie die normale Einfügungssortierung, außer dass die Schrittgröße jeder Bewegung zu einer Lücke statt zu 1 wird:

// shellSort
function shellSort(arr) {
  for(let gap = Math.floor(arr.length/2); gap > 0; gap = Math.floor(gap/2)) {
    // 内层循环与插入排序的写法基本一致,只是每次移动的步长变为 gap
    for(let i = gap; i  0; j -= gap) {
        if(temp >= arr[j-gap]) {
          break;
        }
        arr[j] = arr[j-gap];
      }
      arr[j] = temp;
    }
  }
  return arr;
}

// example
let arr = [2,5,10,7,10,32,90,9,11,1,0,10];
alert(shellSort(arr));

Das Obige ist der gesamte Inhalt dieses Artikels, I Ich hoffe, dass es für alle beim Lernen hilfreich sein wird. Weitere Informationen finden Sie auf der PHP-Chinese-Website für verwandte Inhalte!

Verwandte Empfehlungen:

Das obige ist der detaillierte Inhalt vonJS implementiert die Hill-Sortierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn