Quicksort in-place (deutsch)

Поделиться
HTML-код
  • Опубликовано: 11 дек 2024

Комментарии • 37

  • @svogel6459
    @svogel6459 8 лет назад +34

    Jo, echt danke für das Video. Wenn man die Beschreibung für den Algorithmus im Lehrbuch liest (ohne Visualisierung!) denkt man sich ja einen Knoten ins Hirn :D

  • @yuccapalme
    @yuccapalme 7 лет назад +75

    2:14 "j läuft nach rechts" sollte heißen "i läuft nach rechts"
    ansonsten tolles Video

    • @ed1849x
      @ed1849x 3 года назад

      jo war auch kurz verwirrt

  • @ed1849x
    @ed1849x 3 года назад +3

    Danke, dass du nach dem allgemeinen Video auch noch dieses gemacht hast. Ist perfekt!

  • @slin3232
    @slin3232 6 лет назад +17

    Hi, vielen Dank, deine Videos haben mir sehr geholfen. Über den "rant" musste ich etwas schmunzeln. Wer die Quellen nicht hinterfragt, ist selbst dran schuld, wenn die Prüfung im Anschluss in die Hose geht.

  • @bodenseeboys
    @bodenseeboys 5 лет назад +13

    Die Angaben waren unklar, bin mit Penis im Toaster stecken geblieben.

  • @yaser8818
    @yaser8818 4 года назад +1

    großes dankeschön!! habe die ganze zeit nach einem beispiel gefunden, in dem das pivotelement rechts in der folge gewählt wird, da man hier ja dann das i mit dem pivotelement tauscht statt dem j (wenn man pivotelement links hat). Sehr gutes video:D

  • @maxhaupt041299
    @maxhaupt041299 6 лет назад +5

    Was passiert mit einer Teilliste aus zwei Elementen? Ist j dann gleich dem pivot-element?

    • @Beatboxerskills
      @Beatboxerskills 4 года назад +8

      j und i ist dann gleich.
      Wenn das linke Element größer ist, bleibt i und j geht weiter nach links, also wurden i und j überkreuzt. was zum Abbruch führt. Da i > p ist werden die elemente vertauscht und sind sortiert.
      Wenn das rechte Element größer ist, bleibt j und i geht auf das pivot Element, also werden i und j überkreuzt, was zum Abbruch führt. Da i = p ist, wird nichts getauscht und die Elemente sind sortiert.
      Ich weiß, dass das sicher nicht mehr relevant ist für dich, aber vielleicht liest das jemand, der das selbe Problem hat :p

    • @exti1000
      @exti1000 10 месяцев назад

      @@Beatboxerskills Ja ich, vielen Dank xD

  • @Smile-up8hs
    @Smile-up8hs 7 лет назад +1

    Deine Videos sind sehr hilfreich ... danke! :)

  • @Jacob-ff2rq
    @Jacob-ff2rq 6 лет назад +1

    Ausgerechnet der Worst-Case Fall :D, gutes Video, weiter so :D

  • @timb.8320
    @timb.8320 7 лет назад +16

    Bin einfach durchgefallen in der Abschlussarbeit, weil ich das so gemacht hab !!!!!11!!!!1!1!!!11!elf -.-'

  • @_n0iro.project_590
    @_n0iro.project_590 3 года назад

    Woher weiß ich, wo das j bei nach dem ersten durchlauf anfangen muss? Kann mir das bitte jmd erklären und warum das so ist?

    • @devbosko
      @devbosko 3 года назад

      schau dir das Video ruhig häufiger an. Sie hat es super erklärt.
      Das j fängt nach dem 1. Durchlauf (wie auch beim 1. Durchlauf) 1 vor dem gewählten PE (=Pivotelement) an. Vorrausgesetzt, du machst es wie sie und wählst den letzten Eintrag deiner "Liste" (Arrays) immer als PE.

    • @_n0iro.project_590
      @_n0iro.project_590 3 года назад

      @@devbosko Vielen Dank!
      Ich habe es mir noch mehrmals angeschaut und ein paar Beispiele bearbeitet, dann wurde das Prinzip, auch wenn ich andere PE wähle, klar.
      Die Informatikklausur habe ich bestanden : )

  • @machiavelli8119
    @machiavelli8119 8 лет назад +1

    Gutes Video danke, aber eigentlich muss man nicht nochmal extra überprüfen ob der wert bei i größer ist als das pivot element da i sowieso bei der ersten zahl die nicht kleiner ist als das pivot stehen bleibt oder ?
    Frage: Macht es irgendein Unterschied bei der Implementierung wenn man als Pivot den Anfang der Liste wählt ?

    • @bleeptrack
      @bleeptrack  8 лет назад +1

      Hi, Die Überprüfung ist notwenig, weil es auch sein kann, dass i gar keine größere Zahl (das Pivotelement war schon die größte Zahl) findet und rechts "außerhalb" der Teilleiste landet. Dann muss natürlich nichts mehr getauscht werden.
      In der Implementierung: Wenn ich das gerade richtig im Kopf habe, dann ändert sich folgendes: nachdem sich j und i "überkreuzen", überprüft man nicht ob die Zahl bei i größer als p ist, sondern ob die Zahl bei j kleiner als das Pivot ist und vertauscht die dann noch gegebenenfalls.

    • @machiavelli8119
      @machiavelli8119 8 лет назад

      Ok danke

    • @TheMnvista
      @TheMnvista 8 лет назад

      Läuft i denn trotzdem nach rechts und j nach links, wenn man als Pivot den Anfang der Liste nimmt?

    • @bleeptrack
      @bleeptrack  8 лет назад

      +TheMnvista jup

  • @barcode628
    @barcode628 7 лет назад +1

    Welche Definition von in-place verwendest du denn? Für mich ist in-place so definiert, dass der zusätzlich verwendete Speicher nur konstant sein und nicht von der Länge der Eingabeliste abhängen darf. Das ist doch bei dir insofern nicht der Fall als dass du dir irgendwie merken musst, welche Teillisten noch unsortiert sind, und wieviele Teillisten das nun genau sind, hängt doch wiederum von der Länge der eingegeben Liste ab oder sehe ich das falsch?

    • @bleeptrack
      @bleeptrack  7 лет назад +2

      628071 Hi, du brauchst bei dieser Variante kein zweites Array (oder welche Struktur man halt gerade benutzt), sondern arbeitet nur auf dem Ursprungsarry: daher in-place.

    • @barcode628
      @barcode628 7 лет назад

      Hey, danke für die schnelle Antwort. Bin nicht sicher, ob ich die Frage richtig rübergebracht habe: Die Markierungen, die du im Video mit Kästchen um die Zahlen machst, musst du in der Praxis ja irgendwie speichern. Diese Information müsstest du doch eben gerade in einem solchen zweiten Array/Liste etc. speichern oder wie ließe sich das denn sonst realisieren? Oder beziehst du dich nur darauf, dass die zu sortierenden Daten im selben Array bleiben?

    • @bleeptrack
      @bleeptrack  7 лет назад +2

      +628071 Ah, verstehe! Solche (ich nenne sie Mal Hilfsvariablen), kann man normalerweise vernachlässigen weil sie konstant ( in Abhängigkeit zur Arraylänge) sind. Und da man sich ja gerade lange Arrays für den Speicheraufwand ansieht, fallen die einfach nicht ins Gewicht. Bräuchte man dagegen ein zweites Array, dann merkt man das schon ganz deutlich :)

    • @barcode628
      @barcode628 7 лет назад

      Ok, super. Danke für die Erklärung!

    • @Tubemaster32
      @Tubemaster32 7 лет назад +3

      Wo ist inplace so definiert, 628071??!! Gute Frage die du stellst. Daran erkennt man den Denker :) die richtige Antwort hier wäre gewesen: Der quicksort arbeitet rekursiv und die Pointer werden natürlich alle im stack abgelegt. Im rekursiven Abstiegs kommt da eine große Menge an Pointer zusammen!!! Wie du schon vermutet hast, ist das viel Speicherbedarf, aber auf dem callstack. Wieso es also inplace heißt, liegt lediglich daran, dass all diese Pointer stets auf genau den gleichen, ursprünglichen array zeigen. (wurde ok erklärt) Neben den Pointern wird nur eine einzige Speicherzelle extra benötigt und zwar bei der Vertauschung. Dein Speicherbedarf ist aber nicht konstant! Sämtliche rekursiven Quicksort Aufrufe erfolgen stets mit genau dem gleichen speicheradresse ;)

  • @TheMarvpaul
    @TheMarvpaul 8 лет назад +2

    Super, vielen Dank für das hilfreiche Video (y)

  • @Fakecheckerify
    @Fakecheckerify 5 лет назад

    Vielen Dank für das Video:D

  • @heribertkruso4045
    @heribertkruso4045 5 лет назад

    Hey, also erstmal dein Video ist wunderbar und ich verstehe diese Verfahren bei dir immer am besten! Aber als ich begonnen habe, den Algorithmus in Java zu implementieren, ist mir aufgefallen, dass der Schritt "überprüfe, ob j

  • @xXrudioXx
    @xXrudioXx 6 лет назад +4

    Was ne aufgelegte Python-Lernkurs-Werbung 😂

  • @sciencewithcats2274
    @sciencewithcats2274 3 года назад

    das Intro :D :D :D

  • @toffi9957
    @toffi9957 4 года назад

    Geilomat

  • @Themogawave
    @Themogawave 6 лет назад

    Sehr gut erklärt, danke dir :)