QuickSort - Sortieralgorithmus

00:20:09
https://www.youtube.com/watch?v=mfjCFf0FEZo

Resumo

TLDREl video presenta el algoritmo de ordenamiento QuickSort, explicando su funcionamiento y la importancia de la elección del pivote. Se discuten las complejidades de tiempo y se muestran ejemplos prácticos para ilustrar el proceso de ordenamiento. Se enfatiza que la elección del pivote puede afectar significativamente el rendimiento del algoritmo, especialmente en casos donde el arreglo ya está ordenado. Se recomienda elegir el pivote de manera aleatoria para evitar casos desfavorables y se mencionan otros algoritmos de ordenamiento que pueden ser de interés.

Conclusões

  • 📊 QuickSort es un algoritmo eficiente de ordenamiento.
  • 🔍 La elección del pivote es crucial para el rendimiento.
  • ⚖️ En el mejor caso, QuickSort tiene una complejidad de O(n log n).
  • ⚠️ Un arreglo ya ordenado puede causar un rendimiento cuadrático.
  • 🎲 Elegir un pivote aleatorio puede mejorar la eficiencia.
  • 📈 QuickSort no es un algoritmo estable.
  • 🔄 Se pueden aprender otros métodos de ordenamiento como MergeSort.
  • 📚 Entender diferentes algoritmos de ordenamiento es importante.
  • 🛠️ QuickSort utiliza el principio de dividir y conquistar.
  • 💡 La práctica con ejemplos ayuda a entender el algoritmo.

Linha do tempo

  • 00:00:00 - 00:05:00

    El video presenta el algoritmo de ordenamiento QuickSort, comenzando con una introducción al tema y la importancia de conocer diferentes métodos de ordenamiento. Se menciona que no existe un único método de ordenamiento más rápido, ya que la eficiencia depende de varios factores, como la cantidad de elementos a ordenar y la complejidad de los datos. Se introduce el concepto de 'divide y vencerás' como la base del funcionamiento de QuickSort, donde se selecciona un elemento pivote y se reorganizan los elementos en función de su relación con este pivote.

  • 00:05:00 - 00:10:00

    Se explica cómo se elige el pivote y se realiza el proceso de intercambio de elementos en el arreglo. Se utiliza un ejemplo práctico con un arreglo de ocho valores, donde se selecciona el primer elemento como pivote y se busca reordenar los elementos en función de su comparación con el pivote. Se detallan los pasos para encontrar los elementos que deben intercambiarse y cómo se va formando el arreglo ordenado a medida que se avanza en el proceso.

  • 00:10:00 - 00:15:00

    El proceso de QuickSort se repite en las sublistas generadas a partir del pivote, donde se elige un nuevo pivote y se realizan intercambios hasta que todos los elementos están ordenados. Se muestra cómo se marcan los elementos ya ordenados y se continúa con las sublistas restantes. Se enfatiza la importancia de elegir un buen pivote para evitar un rendimiento cuadrático en el caso de arreglos ya ordenados.

  • 00:15:00 - 00:20:09

    Finalmente, se discuten los casos de rendimiento del algoritmo, incluyendo el caso óptimo donde el pivote divide el arreglo en partes iguales, y el caso desfavorable donde el pivote es siempre el primer elemento en un arreglo ya ordenado, lo que resulta en un rendimiento cuadrático. Se concluye con una invitación a explorar otros métodos de ordenamiento en videos futuros.

Mostrar mais

Mapa mental

Vídeo de perguntas e respostas

  • ¿Qué es el algoritmo QuickSort?

    Es un método de ordenamiento que utiliza el principio de dividir y conquistar.

  • ¿Cómo se elige el pivote en QuickSort?

    Se puede elegir el primer elemento, un elemento aleatorio o el mediano de tres elementos.

  • ¿Cuáles son las complejidades de tiempo de QuickSort?

    En el mejor y promedio de los casos es O(n log n), y en el peor caso es O(n²).

  • ¿Qué factores afectan la eficiencia de QuickSort?

    El número de elementos a ordenar y la elección del pivote.

  • ¿Qué sucede si el arreglo ya está ordenado?

    Puede llevar a un rendimiento cuadrático si se elige el primer elemento como pivote.

  • ¿Qué es un caso desfavorable en QuickSort?

    Ocurre cuando el pivote elegido resulta en particiones muy desiguales.

  • ¿Qué se recomienda para evitar casos desfavorables?

    Elegir el pivote de manera aleatoria o usar un método que garantice una buena partición.

  • ¿QuickSort es estable?

    No, QuickSort no es un algoritmo de ordenamiento estable.

  • ¿Qué otros algoritmos de ordenamiento se pueden aprender?

    Se pueden aprender sobre el algoritmo de ordenamiento por mezcla (MergeSort) y el ordenamiento por conteo (CountingSort).

Ver mais resumos de vídeos

Obtenha acesso instantâneo a resumos gratuitos de vídeos do YouTube com tecnologia de IA!
Legendas
de
Rolagem automática:
  • 00:00:00
    [Musik]
  • 00:00:11
    [Musik]
  • 00:00:13
    also herzlich willkommen verändert west
  • 00:00:17
    das thema heute ist das untier frank
  • 00:00:19
    wixforth kriegs ort galt lange zeit als
  • 00:00:22
    das schmerze bekannte sortiert verfahren
  • 00:00:24
    wurde dann 2009 abgelöst vom dual
  • 00:00:27
    bookrix ort von vladimir jahres last ist
  • 00:00:31
    im übrigen auch das standard ihr
  • 00:00:33
    verfahren weile in der
  • 00:00:34
    programmiersprache java
  • 00:00:36
    ja aber zu sagen das ist das schnellste
  • 00:00:39
    tier verfahren das ist gefährlich das
  • 00:00:41
    werde ich auch immer wieder in meinen
  • 00:00:43
    vorlesungen fragt warum müssen wir diese
  • 00:00:45
    ganzen sortiere verfahren lernen reicht
  • 00:00:47
    es nicht diesen einen schnellsten zu
  • 00:00:49
    können deswegen ist eigentlich man kann
  • 00:00:51
    es nicht pauschal beantworten das ist
  • 00:00:52
    immer der schnellste sortiert muss das
  • 00:00:54
    geht nicht das hängt von zu vielen
  • 00:00:56
    faktoren ab zuallererst natürlich wie
  • 00:00:59
    viele eingabe werte gilt es zu sortieren
  • 00:01:01
    ja muss ich 10 oder 100 werte mit
  • 00:01:03
    anderen vergleichen und sortieren was
  • 00:01:05
    macht eigentlich keinen unterschied ob
  • 00:01:07
    ich in babbels fort mit der
  • 00:01:08
    quadratischen laufzeit benutzt oder
  • 00:01:10
    einen workshop wixforth und lineal
  • 00:01:13
    logarithmische laufzeit haben wobei der
  • 00:01:15
    kriegskosten übrigen auch mal
  • 00:01:16
    quadratisch werden kann kommt aber
  • 00:01:18
    gleich zu sortiere ich aber wenn ich
  • 00:01:21
    eine million oder 10 millionen werte
  • 00:01:22
    dann macht natürlich einen enormen
  • 00:01:23
    unterschied
  • 00:01:25
    einer quadratischen sortierten rhythmus
  • 00:01:28
    wieder in paris ort benutze oder einen
  • 00:01:30
    linear logarithmischen wieder works aus
  • 00:01:31
    den kriegs ort was ist noch entscheidend
  • 00:01:34
    weil ich vergleicht nicht immer nur in
  • 00:01:36
    deutscher werte miteinander manchmal
  • 00:01:38
    kann es sein dass komplexe darf
  • 00:01:40
    miteinander vergleichen muss zum
  • 00:01:42
    beispiel datensätze oder komplexe
  • 00:01:45
    objekte
  • 00:01:45
    das heißt er vergleich alleine ist schon
  • 00:01:48
    sehr zeitaufwendig und dann wäre es
  • 00:01:51
    natürlich sinnvoll einsortieren
  • 00:01:52
    verfahren einzusetzen
  • 00:01:53
    mit möglichst wenigen vergleich
  • 00:01:55
    operation so was wieder wasser abtrieb
  • 00:01:58
    so zum beispiel
  • 00:02:00
    und wir werden darauf wieder fix ort
  • 00:02:03
    eigentlich genau funktioniert der
  • 00:02:05
    arbeitet nach dem sogenannten die reihe
  • 00:02:07
    kommt prinzip teile und herrsche
  • 00:02:10
    das heißt wir haben jetzt ein reh als
  • 00:02:13
    eingabe menge dass unsere teams und das
  • 00:02:15
    wird jetzt immer geteilt und beim
  • 00:02:17
    aufteilen wird schon immer eine ein
  • 00:02:20
    element sogenannte pico element an die
  • 00:02:22
    richtige position gesetzt dieses pivot
  • 00:02:25
    element ist also ein element aus dem
  • 00:02:27
    harry zugs element das wird jetzt immer
  • 00:02:30
    für jeden durchgang als orientierung
  • 00:02:32
    herangezogen so dass sämtliche werte die
  • 00:02:35
    kleiner sind als piero element auf die
  • 00:02:37
    eine seite von der endgültigen position
  • 00:02:40
    kommen und die werte die größer sind auf
  • 00:02:43
    die rechte seite auf die andere seite
  • 00:02:45
    von dem elend das heißt am ende eines
  • 00:02:49
    durchgangs steht immer das pico element
  • 00:02:51
    in der mitte im optimalen fall in der
  • 00:02:53
    mitte und teilt aus eric in zwei gleich
  • 00:02:56
    große hälften auf links und rechts das
  • 00:02:58
    wäre optimal fall allerdings kann man
  • 00:03:00
    das nicht immer garantieren dass das pro
  • 00:03:02
    element tatsächlich immer genau der
  • 00:03:05
    median ist und in der mitte landet denn
  • 00:03:07
    er müsste ich ja erst bestimmen den
  • 00:03:09
    median und das kostet mich ein
  • 00:03:11
    konstanter faktor mehr zeit hat sich in
  • 00:03:14
    der praxis als nicht gut erwiesen es
  • 00:03:16
    gibt im prinzip drei möglichkeiten das
  • 00:03:18
    parlament zu wählen das erste wäre man
  • 00:03:21
    nimmt immer den ersten berg aus dem er
  • 00:03:23
    sagt da werden index 0 dass es mal
  • 00:03:27
    brennt kann gefährlich werden warum ist
  • 00:03:31
    das erinnere mich schon vorsortiert
  • 00:03:32
    block komplett sortiert kriege ich
  • 00:03:35
    quadratische laufzeit warum weil man
  • 00:03:38
    tiefer element steht immer ganz toll
  • 00:03:39
    linken rand und ich teile meine ich gar
  • 00:03:43
    nicht so richtig aus weil ich
  • 00:03:44
    positioniere immer nur mit der komplette
  • 00:03:47
    rest ist es das neue teil
  • 00:03:49
    viel schöner wäre es natürlich wenn ich
  • 00:03:52
    das parlament immer genau in der mitte
  • 00:03:54
    positionieren kann denn dann für zwei
  • 00:03:56
    gleiche teilen race die ich dann re
  • 00:03:59
    kursiv sortieren kann die
  • 00:04:01
    wahrscheinlichkeit
  • 00:04:02
    dass ich nicht diese ungünstigen fall
  • 00:04:05
    bekomme wächst wenn ich ein parlament
  • 00:04:08
    wählen das ich zufällig bestimmen das
  • 00:04:10
    wäre durch die zweite möglichkeit die
  • 00:04:12
    dritte möglichkeit wäre dass ich drei
  • 00:04:14
    werte zufällig bestimmen und davon an
  • 00:04:17
    den milderen benutze als trend ja das
  • 00:04:21
    war schon mal sehr viele informationen
  • 00:04:22
    vorab ich denk mal am klarsten wird es
  • 00:04:25
    wie immer mit einem konkreten beispiel
  • 00:04:27
    deswegen gehe ich jetzt mal aber an die
  • 00:04:28
    tafel macht ein beispiel und zeigt
  • 00:04:31
    schritt für schritt wie denn der krieg
  • 00:04:33
    sorg funktioniert und dann könnt ihr das
  • 00:04:35
    auch wirklich sukzessive nachverfolgen
  • 00:04:37
    wieder eigentlich arbeitet also bis
  • 00:04:40
    gleich
  • 00:04:43
    so ich gebe euch mal einen kurzen
  • 00:04:45
    überblick wir haben jetzt hier eine rey
  • 00:04:48
    mit acht werten und die sind nicht
  • 00:04:51
    sortiert und wir haben hier ganz links
  • 00:04:56
    in der obersten ecke den index stehen
  • 00:04:59
    und ganz rechts auf dem letzten element
  • 00:05:01
    den index j das heißt wir brauchen jetzt
  • 00:05:04
    für den quick sword 2
  • 00:05:05
    indizes einer fängt von vorne an der
  • 00:05:09
    andere fängt von vom hinteren ende aus
  • 00:05:11
    an wie genau zeige ich euch gleich jetzt
  • 00:05:15
    brauchen wir nämlich erstmal das pivot
  • 00:05:16
    element und der einfachheit halber
  • 00:05:18
    wählen wir jetzt das erste element als
  • 00:05:21
    pivot element und das erste element ist
  • 00:05:24
    die 14 und die tragen jetzt hier in
  • 00:05:27
    dieser spalte pivot ein also 14 das ist
  • 00:05:31
    unser pivot element so jetzt gibt es
  • 00:05:34
    hier noch zwei spalten für zahlen
  • 00:05:36
    tauschen dort tragen wir gleich die
  • 00:05:38
    beiden zahlen ein die im re die plätze
  • 00:05:40
    tauschen werden allerdings müssen wir
  • 00:05:42
    diese beiden zahlen jetzt erst mal
  • 00:05:44
    finden
  • 00:05:45
    und das geht folgendermaßen wir fangen
  • 00:05:48
    vorne an mit dem index der läuft jetzt
  • 00:05:50
    von links nach rechts und wir gehen die
  • 00:05:53
    einzelnen elemente durch und suchen
  • 00:05:55
    einen wert der größer gleich dem pivot
  • 00:05:57
    element ist das heißt wir haben jetzt
  • 00:06:00
    erstmal den wert 7 der ist nicht grösser
  • 00:06:02
    9 auch nicht aber die 20 und jetzt
  • 00:06:06
    machen wir mal hier sind kleinen punkt
  • 00:06:07
    rein damit ich weiß wo man index
  • 00:06:10
    momentan steht da steht jetzt hier auf
  • 00:06:12
    der 20 jetzt gehe ich ans hintere ende
  • 00:06:15
    und beginne mit dem index hat nach links
  • 00:06:19
    zu gehen und suche einen wert der
  • 00:06:21
    kleiner gleich den pv element ist die 19
  • 00:06:24
    ist nicht kleiner aber 11.11 es kleiner
  • 00:06:27
    als 14 dann mache ich mir auch einen
  • 00:06:29
    kleinen punkt rein damit ich weiß wo man
  • 00:06:31
    indexiert stehen geblieben ist so 20 und
  • 00:06:35
    11 müssen jetzt die plätze tauschen das
  • 00:06:37
    trage ich hier ein 20
  • 00:06:40
    und 11 und in der zeile darunter
  • 00:06:43
    schreibe ich jetzt die neue anordnung
  • 00:06:46
    des arrays 14
  • 00:06:49
    79 hier wurde jetzt getauscht also die
  • 00:06:52
    elf steht jetzt hier
  • 00:06:57
    16.8 hier landet jetzt die 20
  • 00:07:01
    und die 19 sowohl element bleibt gleich
  • 00:07:05
    das schreibe ich jetzt nicht jedes mal
  • 00:07:06
    neu hin jetzt müssen wir weiter suchen
  • 00:07:09
    und zwar genau an der stelle wo wir
  • 00:07:11
    stehen geblieben sind da habe ich mir
  • 00:07:12
    diesen punkt gemacht das heißt dort
  • 00:07:15
    steht man index und ich suche jetzt
  • 00:07:17
    weiter nach einem wert größer gleich
  • 00:07:19
    sechs gleich 14 dem pivot element und
  • 00:07:22
    das wäre hier schon sofort die 16 16 ist
  • 00:07:25
    größer gleich 14
  • 00:07:27
    jetzt habe ich den ersten treffer
  • 00:07:29
    gelandet dann gehe ich wieder zum index
  • 00:07:32
    j auf die rechte seite der steht ja hier
  • 00:07:34
    wo ich im punkt gesetzt habe und ich geh
  • 00:07:37
    jetzt ein zweiter nach links und suche
  • 00:07:39
    ein wert der kleiner gleich 14 ist und
  • 00:07:41
    die acht ist dann direkt der nächste
  • 00:07:43
    treffer
  • 00:07:44
    also hier habe ich wieder zwei werte die
  • 00:07:46
    die plätze tauschen müssen 16
  • 00:07:50
    und 8 tauschen die plätze
  • 00:07:52
    dann schreibe ich in die nächste zeile
  • 00:07:54
    wieder die neue anordnung hin 14 7 9 11
  • 00:08:01
    jetzt wird hier getauscht also
  • 00:08:04
    816 20 und 19
  • 00:08:09
    so mein index ii steht jetzt hier auf
  • 00:08:13
    der 16 auf der ehemaligen jetzt der acht
  • 00:08:15
    und indexiert steht hier auf der
  • 00:08:18
    ehemaligen acht jetzt 16 wie gehe ich
  • 00:08:21
    weiter vor ich muss wieder den index um
  • 00:08:23
    1 erhöhen das heißt es manchmal zwei
  • 00:08:26
    punkte hin index und j beide treffen
  • 00:08:30
    sich jetzt hier auf der 16 immer wenn
  • 00:08:32
    die beiden indizes sich treffen dann ist
  • 00:08:35
    das meiner abbruch bedingung für diesen
  • 00:08:36
    durchgang das heißt jetzt kann ich mein
  • 00:08:39
    niveau element positionieren und meine
  • 00:08:42
    race aufteilen ja was ist jetzt zu tun
  • 00:08:46
    ich tausche jetzt das pivot element an
  • 00:08:49
    die position - 1 ich stehe hier auf der
  • 00:08:53
    16 - 1 wäre also da oder mit anderen
  • 00:08:56
    worten ich tausche das pivot element mit
  • 00:08:59
    dem letzten element das nicht größer ist
  • 00:09:01
    als es selbst also 14 und 8 tauschen
  • 00:09:05
    jetzt hier die plätze
  • 00:09:09
    also die acht landet jetzt ganz vorne
  • 00:09:14
    79
  • 00:09:17
    11 hier landet das pivot element14
  • 00:09:22
    16
  • 00:09:25
    20.06 sein
  • 00:09:27
    und 19 so jetzt ist das pivot element an
  • 00:09:33
    der richtigen stelle deswegen mache ich
  • 00:09:35
    mal hier so eine kleine umrandung dahin
  • 00:09:40
    damit klar ist die 14 ist fertig
  • 00:09:44
    sortiert das heißt da wird werde ich
  • 00:09:47
    nicht mehr daran gehen die bleibt da
  • 00:09:49
    stehen bis zum ende
  • 00:09:50
    jetzt habe ich zwei teile riss
  • 00:09:52
    produziert links stehen alle werte die
  • 00:09:55
    kleiner sind als das parlament rechts in
  • 00:09:58
    dem teile riss den alle werte die größer
  • 00:10:00
    sind in sich sind die aber noch nicht
  • 00:10:02
    sortiert so wie geht es jetzt weiter ich
  • 00:10:06
    nehme jetzt die teile race und gehe
  • 00:10:08
    genauso vor wie gerade am anfang auch
  • 00:10:11
    also das neue teile hier wäre ja 87 9
  • 00:10:17
    11 und hier bestimme ich jetzt auch
  • 00:10:20
    wieder das niveau element und das ist
  • 00:10:22
    immer das erste habe ich ja gesagt also
  • 00:10:24
    wenn man jetzt hier in die spalte pivot
  • 00:10:26
    die acht reinschreiben das ist mein
  • 00:10:28
    neues pivot element ja und jetzt gehe
  • 00:10:31
    ich wieder genauso vor wie gerade auch
  • 00:10:32
    mit dem index ivan da ich nach rechts
  • 00:10:35
    und suche ein wert der größer gleich
  • 00:10:37
    acht ist und dann finde ich hier die
  • 00:10:39
    neun
  • 00:10:40
    so mein index j steht er jetzt hier auf
  • 00:10:43
    der 11 und nicht wandern nach links um
  • 00:10:46
    suche einen wert der kleiner gleich acht
  • 00:10:48
    ist die elf passt nicht und auf der neun
  • 00:10:52
    sitze ich schon mit meinem index das
  • 00:10:55
    heißt hier habe ich dann wieder die
  • 00:10:56
    abbruch bedingung die union treffen sich
  • 00:10:59
    also muss ich das pico element wieder an
  • 00:11:02
    die richtige position wechseln nämlich
  • 00:11:04
    an die position ii - 1 wie steht hier
  • 00:11:08
    auf der 9
  • 00:11:09
    das heißt 8 und 7 tauschen die plätze
  • 00:11:16
    8 und 7 dann schreiben wir die neue
  • 00:11:20
    zeile hin sieben acht neun und
  • 00:11:25
    elf und das pro element kann ich jetzt
  • 00:11:28
    wieder markieren das ist sortiert also
  • 00:11:32
    macht man kästchen drum
  • 00:11:35
    so jetzt habe ich wieder zwei teile riss
  • 00:11:38
    produziert einmaleins was ein element
  • 00:11:41
    ist mit der 7 und weil das ein element
  • 00:11:43
    ist kann ich auch direkt ein kästchen
  • 00:11:45
    drum machen
  • 00:11:46
    denn da kann ja nichts weiter passieren
  • 00:11:49
    der ist jetzt auch sortiert und auf der
  • 00:11:52
    rechten seite haben wir die neuen und
  • 00:11:54
    die elf das wäre jetzt das neue teil wo
  • 00:11:58
    ich auch wieder das niveau element
  • 00:12:00
    bestimmen muss hier wäre das erste
  • 00:12:02
    element an die 9
  • 00:12:04
    also neu ist dass pro element und jetzt
  • 00:12:08
    gilt wieder genauso vor wie vorhin auch
  • 00:12:10
    ich suche mit dem index nach einem wert
  • 00:12:14
    der größer gleich dem pivot element ist
  • 00:12:17
    das heißt ich lande hier auf der 11 habt
  • 00:12:19
    dann treffer da sitzt aber auch schon
  • 00:12:21
    mein index j das heißt ich habe jetzt
  • 00:12:23
    auch sofort die abbruch bedingung also
  • 00:12:25
    muss ich mein niveau element an die
  • 00:12:27
    position - eins tauschen und das wäre
  • 00:12:31
    dann die position links von der 11 da
  • 00:12:33
    steht die neuen sowieso schon also im
  • 00:12:36
    prinzip tauscht die neuen mit der neuen
  • 00:12:37
    dem platz bleibt also da stehen wo sie
  • 00:12:40
    ist und somit wäre die neuen sortiert
  • 00:12:46
    und weil wir jetzt einen teil ihrer
  • 00:12:50
    größe 1 bekommen mit der elf kann ich
  • 00:12:52
    hier auch direkt ein kästchen drum
  • 00:12:54
    zeichnen das ist dann auch sortiert
  • 00:12:58
    so jetzt haben wir aber noch das erste
  • 00:13:01
    teil von hier oben noch zu sortieren
  • 00:13:04
    also 16
  • 00:13:06
    [Musik]
  • 00:13:08
    20 19 das erste element wird meint ivo
  • 00:13:14
    16 jetzt suche ich wieder von links
  • 00:13:17
    kommend mit im index je nach einem wert
  • 00:13:20
    der größer gleich 16 ist und finde hier
  • 00:13:22
    ein mit der 20 jetzt muss ich mit
  • 00:13:25
    indexiert von rechts nach links wandern
  • 00:13:27
    und einen wert suchen der kleiner gleich
  • 00:13:29
    16 ist die 19 stimmt nicht 20 jetzt habe
  • 00:13:34
    ich hier wieder meine abbruch bedingung
  • 00:13:36
    da sitzt ja schon der index also was
  • 00:13:39
    passiert ich tausche mein pivot element
  • 00:13:42
    an die position ii - 1 - 1 wäre also
  • 00:13:46
    links von der 20 die 16 tauscht mit der
  • 00:13:49
    16
  • 00:13:50
    mit anderen worten die 16 bleibt da
  • 00:13:52
    stehen wo sie ist und kann als sortiert
  • 00:13:54
    markiert werden also kästchen darum
  • 00:14:02
    was bleibt übrig das rechte teil mit 20
  • 00:14:07
    und 19 pivot element wie immer das erste
  • 00:14:10
    element 20 jetzt suche ich wieder nach
  • 00:14:14
    einem wert der größer gleich 20 ist ich
  • 00:14:17
    wandere mit index nach rechts und lande
  • 00:14:21
    hier am ende ohne einen wert gefunden zu
  • 00:14:24
    haben der größer gleich 20 ist in dem
  • 00:14:27
    fall muss das pivot element das größte
  • 00:14:30
    element sein und muss damit ans ende
  • 00:14:33
    gewechselt werden also 20 und 19
  • 00:14:37
    tauschen die plätze
  • 00:14:41
    dann kann ich die 20 markieren als
  • 00:14:45
    sortiert
  • 00:14:49
    und weil die 19 jetzt alleine dasteht
  • 00:14:52
    kann nichts spannendes mehr passieren
  • 00:14:54
    die ist dann auch als sortiert zu
  • 00:14:56
    markieren
  • 00:15:00
    und wenn man jetzt von links nach rechts
  • 00:15:02
    die umrandeten kästchen least haben wir
  • 00:15:04
    eine aufsteigende sortierung also
  • 00:15:08
    789 11 14 16 19 20
  • 00:15:17
    so jetzt zeige ich euch noch mal ein
  • 00:15:19
    anderes beispiel nehme ich ja ein
  • 00:15:22
    negativbeispiel für den quick sword wenn
  • 00:15:24
    er nämlich ein bereits sortiertes array
  • 00:15:26
    sortieren soll wer immer das erste
  • 00:15:28
    element als pivot element bestimmen dann
  • 00:15:31
    bekommen wir nämlich eine schlechte eine
  • 00:15:33
    ungünstige aufteilung und letztendlich
  • 00:15:35
    quadratische laufzeit also wir machen
  • 00:15:38
    die gleiche strategie wie gerade auch
  • 00:15:40
    und wählen jetzt hier das erste element
  • 00:15:42
    also die zwei als pivot element so jetzt
  • 00:15:46
    suche ich einen wert der größer ist als
  • 00:15:49
    die zwei und finde hier sofort mit der
  • 00:15:52
    vier einen passenden wert somit index j
  • 00:15:54
    muss ich jetzt von rechts nach links
  • 00:15:56
    wandern einen wert suchen der kleiner
  • 00:15:58
    gleich dem pivot ist und dort werde ich
  • 00:16:01
    überhaupt nicht fündig ich laufe immer
  • 00:16:03
    weiter immer weiter nach links bis ich
  • 00:16:05
    hier auf der vier lande wo man index eh
  • 00:16:07
    schon positioniert ist also abbruch
  • 00:16:10
    bedingung die zwei wird an die position
  • 00:16:12
    ii - 1 getauscht also bleibt
  • 00:16:15
    letztendlich da stehen wo sie ist und
  • 00:16:17
    ich kann jetzt die zwei als sortiert
  • 00:16:21
    markieren
  • 00:16:23
    und jetzt sieht man die ungünstige
  • 00:16:25
    aufteilung
  • 00:16:27
    ich habe letztendlich links von der 2
  • 00:16:30
    überhaupt kein teile rey und der
  • 00:16:33
    komplette rest ist auf der rechten seite
  • 00:16:35
    von mr ich habe also eine äußerst
  • 00:16:38
    ungünstige aufteilung und müsste jetzt
  • 00:16:40
    hier mit
  • 00:16:41
    diesem teil re weitermachen 4 6 8 10
  • 00:16:48
    12 14
  • 00:16:51
    16 pivot element
  • 00:16:54
    erstes element die vier auch hier wieder
  • 00:16:57
    suche ich von links ein wert der größer
  • 00:17:00
    gleich vier ist habe ich hier mit der
  • 00:17:02
    sechs gefunden und von rechts komme ich
  • 00:17:04
    wieder mit index j finde keinen wert der
  • 00:17:07
    kleiner gleich vier ist lande auf der
  • 00:17:09
    sechs wo auch index schon ist und dann
  • 00:17:12
    muss ich die vier an die position ii - 1
  • 00:17:16
    tauschen also i die vier bleibt stehen
  • 00:17:19
    wo sie ist
  • 00:17:21
    und dann kann ich die vier als markiert
  • 00:17:24
    sortieren
  • 00:17:27
    und so weiter ich glaube ihr könnt sehen
  • 00:17:30
    wie sich das entwickelt
  • 00:17:31
    das heißt es wird immer nur vorne die
  • 00:17:33
    erste zahl
  • 00:17:35
    abgeschnitten und man produziert
  • 00:17:38
    letztendlich ein einzelnes neues teile
  • 00:17:41
    rey mit dem kompletten rest des arrays
  • 00:17:44
    und das führt letztendlich zu einer
  • 00:17:47
    quadratischen laufzeit
  • 00:17:49
    ja das wäre also ein grund dafür dass
  • 00:17:52
    pivot element nicht so zu wählen wie ich
  • 00:17:54
    euch das gezeigt habe immer das erste
  • 00:17:56
    element sondern den zufall entscheiden
  • 00:17:59
    zu lassen denn dann kann ich davon
  • 00:18:01
    ausgehen oder darf ich davon ausgehen
  • 00:18:03
    dass ich eine linear logarithmische
  • 00:18:05
    laufzeit bekomme also eine komplexität
  • 00:18:08
    von o von n mal lockt von in
  • 00:18:11
    so hier seht ihr noch mal diese
  • 00:18:13
    ungünstige oder schlechte zerlegung wenn
  • 00:18:16
    das re bereits sortiert ist so bekomme
  • 00:18:20
    ich halt eine quadratische laufzeit also
  • 00:18:22
    meine raider größe m wird immer
  • 00:18:24
    aufgeteilt in der form nach links kommt
  • 00:18:27
    ein element und -1 elemente kommen dann
  • 00:18:31
    auf die rechte seite und so weiter und
  • 00:18:33
    so kriegen wir halt diesen ungünstigen
  • 00:18:35
    fall mit opa nennt quadrat also
  • 00:18:37
    quadratischer laufzeit
  • 00:18:40
    hier auf diesem bild seht ihr den besten
  • 00:18:43
    fall nämlich immer dann wenn mein pivot
  • 00:18:45
    element genau in der mitte landet und
  • 00:18:48
    meine rey in zwei gleich große teile
  • 00:18:50
    race aufteilt so kriege ich eine
  • 00:18:52
    logarithmische tiefe und letztendlich
  • 00:18:54
    ein lineal logarithmische laufzeit also
  • 00:18:57
    von n loco nennen
  • 00:19:00
    auf dieser folie seht ihr mal drei
  • 00:19:04
    unterschiedliche konstellationen vom
  • 00:19:06
    quick sox nämlich mit beispiel die
  • 00:19:09
    optimale aufteilung dann wenn das pivot
  • 00:19:12
    element immer genau in der mitte landet
  • 00:19:14
    da kriegen wir halt die linear
  • 00:19:16
    logarithmische laufzeit beispiel cs dann
  • 00:19:19
    genau das negative gegenbeispiel mit
  • 00:19:21
    einer mit einem sortierten re wo ich
  • 00:19:23
    dann immer die aufteilung 1 zu ende -1
  • 00:19:27
    bekomme und das resultiert dann
  • 00:19:30
    schließlich in quadratischer laufzeit
  • 00:19:32
    und links unten mit beispiel b sehen wir
  • 00:19:35
    ja die aufteilung wie sie im mittel zu
  • 00:19:38
    erwarten ist
  • 00:19:43
    ja das ist der king saud gewesen ich
  • 00:19:47
    hoffe ich konnte euch den fix von
  • 00:19:48
    halbwegs verständlich vermitteln und
  • 00:19:51
    wenn er interesse noch an anderen
  • 00:19:52
    tiergruppen habt ich habe noch einige
  • 00:19:54
    andere videos produzieren mit zum
  • 00:19:57
    beispiel dem higgs ort oder dem counting
  • 00:20:00
    sword könnte das in meinen anderen
  • 00:20:01
    videos natürlich finden ich freue mich
  • 00:20:04
    meinen daumen hoch und sagte zum
  • 00:20:05
    nächsten mal
Etiquetas
  • QuickSort
  • algoritmo
  • ordenamiento
  • pivote
  • eficiencia
  • complejidad
  • dividir y conquistar
  • ejemplos
  • casos desfavorables
  • algoritmos de ordenamiento