Was bedeuten diese Variablen c und d in dieser Blasensortierung in C?

8

Ich verstehe also, dass eine Blasensortierung in aufsteigender Reihenfolge prüft, ob der Index i größer ist als der Index "i + 1", und wenn dies der Fall ist, tauscht er die Positionen und fährt dann weiter, bis er das Ende der Schleife erreicht. und dann beginnt die Schleife neu und wechselt die Positionen, bis jeder Index "i" nicht größer als "i + 1" ist, und dann wird die Schleife in aufsteigender Reihenfolge vollständig sortiert.

Also schaue ich mir diesen Blasenkode an. Hier ist die Quelle: www.programmingsimplified.com/c/source-code/c-program-bubble-sort

Hier ist der Code:

%Vor%

Ich verstehe alle Variablen außer "d". Ich habe keine Ahnung, was sie esoterisch bedeuten. Also das ist der Codeabschnitt, der mich verwirrt:

%Vor%

Wie ich es verstehe, schreitet die erste for-Schleife durch das Array der Länge n - 1, weil in C der erste Index eines Arrays 0 ist. Die Länge der zweiten for-Schleife scheint die Länge von "c" zu sein Es schreitet durch das Array, aber es ist nicht die Länge des Arrays (n - 1), so dass es mich verwirrt. Ich verstehe nicht, was d ist, deshalb verstehe ich nicht, warum "d" in den Swap - Anweisungen anstelle von "c" verwendet wird. Ich verstehe, was der Swap tut, indem ich die Elemente des Arrays wie im Intro mit dem Austauschen der Indizes.

Also ich denke, was ich am meisten nicht verstehe ist, warum die zweite for-Schleife notwendig ist und die Länge des Arrays von d:

%Vor%

Der Code, der auf der Webseite zur Verfügung gestellt wird, sortiert also korrekt. Ich habe es mit n = 5 versucht, und Werte = {9, 8, 7, 6, 5}

Sie ordnet sie erfolgreich in {5, 6, 7, 8, 9} in aufsteigender Reihenfolge an.

Da ich die zweite for-Schleife nicht verstehe, dachte ich, ich würde sehen, was passieren würde, wenn ich es nicht einschließen würde, und das Ergebnis ist interessant. Ich habe gerade die zweite for-Schleife entfernt und die Erwähnung von "d" durch c ersetzt.

%Vor%

Wenn ich sehe, was mit diesem Code passiert, als ich die zweite for-Schleife entfernte, bekomme ich dieses Ergebnis. Ich gebe 5 Elemente ein: {9, 8, 7, 6, 5} und die Reihenfolge, die ich zurückbekomme ist: {8, 7, 6, 5, 9}. Das ist eindeutig nicht in aufsteigender Reihenfolge. Aber es hat eine Blase durch das ganze Set sortiert; es hat nur einen Durchlauf abgeschlossen, deshalb beginnt dieses sortierte Array bei 8, da es nur einen Durchlauf gemacht hat.

Auch dieser falsche Code kann dieses 5-Elemente-Array jetzt korrekt sortieren: {1, 8, 2, 3, 7}. Es ändert sich zu {1, 2, 3, 7, 8}. Aber es brauchte nur einen Durchlauf durch das Array, um diese Blasensortierung korrekt abzuschließen.

So habe ich entdeckt, dass die zweite for-Schleife sicherstellt, dass das Array numerisch in aufsteigender Reihenfolge sortiert wird, da viele Durchgänge von Bubble-Sortierungen erforderlich sind, um die Änderung durchzuführen.

Aber ich verstehe es immer noch nicht und es ist schwer zu erklären, wie ich es nicht verstehe. Ich weiß sehr wohl, dass "c" der Index ist, der von Anfang bis Ende durch das Array gleitet. Aber welche Art von Index ist "d" und wo fängt er wirklich an und wo endet er wirklich?

Danke.

Wenn Sie einfacheren Code haben, der für eine Bubble-Sortierung keinen For-Loop-Aufruf benötigt, und Sie nur eine Variable verwenden können, würde ich mich freuen, diesen Code zu bewundern.

    
xyz123 03.05.2017, 04:46
quelle

2 Antworten

9

Hier c & amp; amp; d zum Durchlaufen und Sortieren der Schleife

für c die gesamte Schleife wird n-mal durchlaufen

und für d

Alle Elemente des Arrays mit Ausnahme der sortierten werden durchlaufen und zum Sortieren des Arrays verwendet

hoffe, dass Sie die Tatsache jetzt verstehen

Happy Coding

    
Imran Hossain 03.05.2017, 04:55
quelle
4

Was passiert ist, wenn C 0 ist, durchlaufen wir das ganze Array (bis zu N - C - 1) und die maximale Ziffer wird am Ende gesetzt. Sobald wir die größte Ziffer am Ende des Arrays haben, wo es hingehört, müssen wir uns keine Sorgen mehr machen. Danach wird C erhöht, und wir sortieren N - 1 - 1, was der größte Wert ist, den D erreichen wird.

Eine andere Art zu erklären. Wenn C 0 ist, bringen wir die maximale Ziffer bis zur letzten Position in dem Array. Wenn C 1 ist, wird die zweitgrößte Stelle bis zur letzten - 1 Position im Array angezeigt. Und so weiter und so fort.

D ist derjenige, der das Traversieren tatsächlich durchführt, und denkt an C als Zähler.

    
Anton Savelyev 03.05.2017 05:01
quelle

Tags und Links