shell sort c with examples
Shell-Sortiertechnik in C ++: Eine vollständige Übersicht.
Die Shell-Sortierung wird häufig als Verbesserung gegenüber der Insertionssortierung bezeichnet. Bei der Einfügesortierung nehmen wir Inkremente um 1, um Elemente zu vergleichen und sie an die richtige Position zu bringen.
Bei der Shell-Sortierung wird die Liste sortiert, indem sie in mehrere kleinere Unterlisten unterteilt wird. Es ist nicht erforderlich, dass die Listen zusammenhängende Elemente enthalten. Stattdessen verwendet die Shell-Sortiertechnik das Inkrement i, das auch als 'Lücke' bezeichnet wird, und erstellt damit eine Liste von Elementen, die 'i' -Elemente voneinander entfernt sind.
=> Hier finden Sie Informationen zur vollständigen Liste der C ++ - Tutorials.
Was sind gute Websites, um Anime zu sehen
Was du lernen wirst:
Allgemeiner Algorithmus
Der allgemeine Algorithmus für die Shell-Sortierung ist unten angegeben.
shell_sort (A, N)
wo A - Liste sortiert werden soll; N - gap_size
setze gap_size = N, flag = 1
während gap_size> 1 oder flag = 1, wiederholen
Start
setze flag = 0
setze gap_size = (gap_size + 1) / 2
Ende
für i = 0 bis i<(N-gap_size) repeat
Start
wenn A (i + gap_size)> A (i)
Tauschen Sie A (i + gap_size), A (i)
setze flag = 0
Ende
Ende
Daher setzen wir im obigen Algorithmus zuerst N, was die Lücke zum Sortieren des Arrays A unter Verwendung der Shell-Sortierung ist. Im nächsten Schritt teilen wir das Array mithilfe der Lücke in Unterarrays auf. Im nächsten Schritt sortieren wir dann jedes der Sub-Arrays so, dass wir am Ende der Schleife ein sortiertes Array erhalten.
Als nächstes betrachten wir ein detailliertes Beispiel, um die Shell-Sortierung anhand einer bildlichen Darstellung besser zu verstehen.
Illustration
Lassen Sie uns die Shell-Sortierung anhand eines Beispiels veranschaulichen.
Betrachten Sie das folgende Array mit 10 Elementen.
Wenn wir eine Lücke von 3 angeben, haben wir die folgenden Unterlisten mit jedem Element, das 3 Elemente voneinander entfernt ist. Wir sortieren dann diese drei Unterlisten.
Die sortierten Unterlisten und die resultierende Liste, die wir nach dem Kombinieren der drei sortierten Unterlisten erhalten, werden unten gezeigt.
Das obige Array, das wir nach dem Zusammenführen der sortierten Subarrays erhalten haben, ist nahezu sortiert. Jetzt können wir die Einfügungssortierung für diese Liste durchführen und das gesamte Array sortieren. Dieser letzte Schritt wird unten als Referenz gezeigt.
Wie oben gezeigt, waren nach dem Ausführen der Shell-Sortierung und dem Zusammenführen der sortierten Unterlisten nur drei Schritte erforderlich, um die Liste vollständig zu sortieren. So können wir sehen, dass wir die Anzahl der Schritte, die zum Sortieren des Arrays erforderlich sind, erheblich reduzieren können.
Die Wahl des Inkrements zum Erstellen von Unterlisten ist ein einzigartiges Merkmal der Shell-Sortierung.
C ++ Beispiel
Lassen Sie uns die Implementierung der Shell-Sortierung in C ++ unten sehen.
#include using namespace std; // shellsort implementation int shellSort(int arr(), int N) { for (int gap = N/2; gap > 0; gap /= 2) { for (int i = gap; i = gap && arr(j - gap) > temp; j -= gap) arr(j) = arr(j - gap); arr(j) = temp; } } return 0; } int main() { int arr() = {45,23,53,43,18,24,8,95,101}, i; //Calculate size of array int N = sizeof(arr)/sizeof(arr(0)); cout << 'Array to be sorted:
'; for (int i=0; i Ausgabe:
Zu sortierendes Array:
45 23 53 43 18 24 8 95 101
Array nach Shell-Sortierung:
8 18 23 24 43 45 53 95 101
Wir haben dieselbe Liste verwendet, die wir in der Abbildung verwendet haben, und wir können sehen, dass wir zunächst zwei Unterlisten erstellen und dann die Lücke weiter verringern. Sobald Unterlisten gemäß der angegebenen Lücke erstellt wurden, sortieren wir jede der Unterlisten. Nachdem alle Unterlisten sortiert sind, erhalten wir die fast sortierte Liste. Jetzt kann diese Liste mit der einfachen Einfügesortierung sortiert werden, die nur sehr wenige Züge benötigt.
Als nächstes implementieren wir die Shell-Sortierung in der Java-Sprache.
Java-Beispiel
// Java class for ShellSort class ShellSort { //function to sort the array using shell sort int sort(int arr()) { int N = arr.length; // Start with a big gap, then narrow the gap for (int gap = N/2; gap > 0; gap /= 2) { //sort sub lists created by applying gap for (int i = gap; i = gap && arr(j - gap) > temp; j -= gap) arr(j) = arr(j - gap); arr(j) = temp; } } return 0; } } class Main{ public static void main(String args()) { int arr() = {45,23,53,43,18,24,8,95,101}; int N = arr.length; System.out.println('Array to be sorted: '); for (int i=0; i Ausgabe:
Zu sortierendes Array:
45 23 53 43 18 24 8 95 101
Array nach Shell-Sortierung:
8 18 23 24 43 45 53 95 101
Wir haben die gleiche Logik für die Shell-Sortierung in C ++ - und Java-Programmen implementiert. Wie oben im Java-Programm erläutert, teilen wir das Array zunächst in Subarrays auf und sortieren sie dann, um ein vollständig sortiertes Array zu erhalten.
Fazit
Die Shell-Sortierung ist der hocheffiziente Algorithmus, der gegenüber der Einfügungssortierung zu einer Verbesserung führt.
Während die Einfügesortierung durch Inkrementieren ihrer Elemente um 1 funktioniert, verwendet die Shell-Sortierung den Parameter 'Lücke', um das Array in Unterarrays zu unterteilen, deren Elemente 'Lücke' voneinander entfernt sind. Dann können wir die einzelne Liste mithilfe der Einfügesortierung sortieren, um das vollständige sortierte Array zu erhalten.
Die Shell-Sortierung ist schneller als die Einfügesortierung und benötigt weniger Schritte zum Sortieren des Arrays als die Einfügesortierung. In unserem nächsten Tutorial erfahren Sie alles über die Heap-Sortiertechnik zum Sortieren von Datenstrukturen.
=> Besuchen Sie hier, um C ++ von Grund auf neu zu lernen.
Literatur-Empfehlungen
- Auswahl In C ++ mit Beispielen sortieren
- MongoDB Sort () -Methode mit Beispielen
- Unix-Sortierbefehl mit Syntax, Optionen und Beispielen
- Blasensortierung in C ++ mit Beispielen
- Einfügungssortierung in C ++ mit Beispielen
- Sortierung in C ++ mit Beispielen zusammenführen
- Heap-Sortierung in C ++ mit Beispielen
- Schnelle Sortierung in C ++ mit Beispielen