Quicksort In Python Explained (With Example And Code)

Sdílet
Vložit
  • čas přidán 9. 07. 2024
  • Quicksort is an efficient sorting algorithm with O(n*logn) average running time. In this video I show you a quick example and how to implement this algorithm in Python step by step.
    This video is part of the basic algorithms in Python playlist. The goal is to get an understanding of basic computer science algorithms and their implementation in Python.
    For more coding videos subscribe to my youtube channel.
  • Věda a technologie

Komentáře • 80

  • @1Lia11
    @1Lia11 Před měsícem +2

    i've been searching for hours for a video that could explain exactly what happens when there is only 2 elements, and i finally got it! thanks a lot

  • @zaeemjaved6850
    @zaeemjaved6850 Před rokem +20

    Of all the videos I watched on youtube for quick sort, I understood this one a lot better in a much more intuitive way.

  • @LanaDelReyFan1998
    @LanaDelReyFan1998 Před 2 lety +15

    this entire playlist saved me great deal of time. thank you very much!

  • @stumbleio
    @stumbleio Před 5 měsíci +1

    Best explanation on CZcams. You should continue making these types of videos. You do such a great job at it!

  • @ganeshreddykomitireddy5128

    one of the finest explanations found on youtube.

  • @DanielSmith-uj7rr
    @DanielSmith-uj7rr Před 2 lety +11

    Very best explanation of the quick sort. Thank you. Please ignore the Dislikes and Keep it up bro. You did an amazing job to clear the understanding of this algorithm. Thank you again!

  • @binkarimov4218
    @binkarimov4218 Před 4 měsíci

    Bro you gave me full understanding of quick sort! Thank you! Please continue to make such videos with other sortings in Python!

  • @narayanadhurti1603
    @narayanadhurti1603 Před 5 dny

    This is indeed a great explanation.Thanks a ton.

  • @henryconner780
    @henryconner780 Před měsícem +1

    Thanks bro, really great visual. You saved me a lot of time

  • @LukeAvedon
    @LukeAvedon Před rokem

    LOVE THE SWAP ANIMATION!

  • @syydsalman
    @syydsalman Před 2 lety +1

    Masha"Allah Felix, This took me a day to understand, you video helped me alot

  • @ibrohimahmadjonov6859

    Thank you for so comprehensive explanation

  • @TheKorkahn
    @TheKorkahn Před 4 lety +2

    nice smoothing voice, thanks for the explanation FelixTechTips!!

  • @polimorphic13
    @polimorphic13 Před rokem

    The graphic explanation is perfect.

  • @liabasqulizad7962
    @liabasqulizad7962 Před 3 měsíci +1

    Thank you sir. That was very good explanation.

  • @potlurisairaj6669
    @potlurisairaj6669 Před rokem

    you saved my time thank you

  • @AM-nl5yo
    @AM-nl5yo Před 2 lety

    Thank you, this helps me ✨

  • @creative_py9169
    @creative_py9169 Před 2 lety

    Very good explanation

  • @darcash1738
    @darcash1738 Před 3 měsíci

    Could we also make the right endpoint just the very end of the array and the left at index 0? Or how would we do it if a different pivot was used?

  • @ahmet8266
    @ahmet8266 Před 2 lety +1

    I got it thank you

  • @olafschlammbeutel
    @olafschlammbeutel Před 4 lety

    Nice animations!

  • @Mc-os1yc
    @Mc-os1yc Před 2 lety +26

    In your visual explanation, you mentioned a scenario where j < i. That will never happen in your code because both while loops break when i=j. Anyway, it's a good vid nonetheless. thanks

    • @jeanluc9129
      @jeanluc9129 Před rokem +1

      I don't think that's right. Only the outer loop will break when i=j

  • @DJsteuph
    @DJsteuph Před 5 měsíci

    when i does not get incremented if the while loop does not run at all initially, that then creates a negative -1 right parameter in the quicksort(arr, left, partition_pos-1) ,where partition_pos=0, function later on. Why isn't this a problem?

  • @allandogreat
    @allandogreat Před 2 lety

    good works

  • @logofios
    @logofios Před rokem

    Cool!

  • @aungkyawkhant321
    @aungkyawkhant321 Před 7 měsíci +1

    Incredible explanation!

  • @maxfrischdev
    @maxfrischdev Před 8 měsíci +2

    what ever your reason was, that made you stop making videos. 1. Thanks for making them, really well explained! Hut ab!
    2. The market for tutorial creators might seem "overcrowded" but really sad that you stopped, I think you have great potential!
    Have a good life, mate! 🤘

    • @FelixTechTips
      @FelixTechTips  Před 7 měsíci +1

      Vielen vielen Dank für die nette Worte. Ich hatte wenig Zeit in den letzten Jahren, aber ich plane ab 2024 weiterzumachen :) Grüße nach Indonesien :)

    • @maxfrischdev
      @maxfrischdev Před 6 měsíci

      @@FelixTechTips dann wünsche ich dir einen starken Start im neuen Jahr! 💪🏻🤘🏻🤘🏻🤘🏻🤘🏻😁

  • @user-hn5vk7ny6i
    @user-hn5vk7ny6i Před 6 měsíci

    Hey !your explanation is great.one quick question
    Python has line by line interpreter
    So,when we call partition function won't that cause declaration error because it should be declared first before calling...

  • @abhiprit20
    @abhiprit20 Před 2 lety

    Instead of passing list as input, if tuple, dictionary, set is passed. So will the time complexity of the algorithm remains same or will differ?
    Thanks,

    • @jesmigeorge4936
      @jesmigeorge4936 Před 2 lety

      Now this won't work on tuple i suppose because tuples are immutable and in this algorithm we swap and make changes in place itself. So.. Nope it won't work for tuples.it would give us error... So it's time complexity might not be there with tuples.

  • @liiiaaaaammm
    @liiiaaaaammm Před 3 měsíci

    cual es la condicion de parada para la recursion?

  • @jasmineshaik7025
    @jasmineshaik7025 Před 11 měsíci

    Super.....but ur code should be zoomed it will look better anyway nice ❤️

  • @PureCrimsonLotus
    @PureCrimsonLotus Před rokem +2

    At 11:08, you say "the j that defines the point right of the pivot," but if the pivot is always the last element in the array, nothing can be to its right. Did you mean "the point left of the pivot"?

  • @jenniferr3204
    @jenniferr3204 Před 6 měsíci

    Thank you! Your explanations were very good. How would I change the code for parallel quickSort? Is dynamic parallel quickSort the same as just parallel quickSort?

    • @darcash1738
      @darcash1738 Před 3 měsíci

      I’m not sure what this means but this sounds like you could know the answer to this. Could we also make the right endpoint just the very end of the array and the left at index 0? Or how would we do it if a different pivot was used?

  • @samuelvalentine7846
    @samuelvalentine7846 Před rokem

    For me, i found another way to do the partitioning using a for loop in python
    def partition(arr, high, low=0):
    if not arr and not high:
    return 'No array and no upperbound'
    pivot = arr[high]
    partion_at = low
    for j in range(low, high):
    if arr[j]

  • @andresc.56
    @andresc.56 Před 8 měsíci

    ur awesome

  • @ermiasendale
    @ermiasendale Před 8 měsíci

    Why don't we use "if array[i] > pivot and i > j "# indicating that they have crossed each other instead of "if array[i] > pivot:" since our objective is to handle the scenario where they cross each other?

  • @SpencerBoucher
    @SpencerBoucher Před 2 lety +3

    I'm having trouble understanding one thing. After i and j meet, shouldn't we just unconditionally exchange arr[i] and the pivot? Why do we check that arr[i] > arr[right] at that point? Shouldn't the pivot be placed at that point that i and j meet in order to be properly sorted?

    • @manojkarthik6158
      @manojkarthik6158 Před 2 lety

      Same doubt bro

    • @jacqueline2330
      @jacqueline2330 Před 2 lety +6

      i think the check is considering the case that only TWO elements were left. we always pick up the last element as our pivot, and the remaining one will become the one=i=j automatically. so we should check it first before we swap them. Like in the video 8:27, what if we have 77 88 left already inplace instead of 88 77?

  • @alex_reye
    @alex_reye Před 2 lety +2

    Thank you so much for the explanation!
    By the way, how should this algorithm be implemented with random element chosen as the pivot?

    • @anirudhsoni6529
      @anirudhsoni6529 Před 2 lety

      we could use any element as pivot in this case he has taken the last one

    • @darcash1738
      @darcash1738 Před 3 měsíci

      @@anirudhsoni6529would we put the right pointer at the very end of the array instead of how he has it here, where it is just left of the last element?

  • @ejazxdd
    @ejazxdd Před rokem +1

    Kalander op

  • @mohamed5986
    @mohamed5986 Před rokem

    i faced a problem in it that quick sort isn't quick with me at all
    idk why it doesn't work i guess my laptop is kinda weak

  • @mbappekawani9716
    @mbappekawani9716 Před 3 lety +1

    j can be less than i???

  • @user-qb5tg6eg2e
    @user-qb5tg6eg2e Před 2 lety +1

    13:36 my own video mark

  • @shootanees150
    @shootanees150 Před rokem

    Dadu pashu 😍😍😍😍

  • @the_gadfly5717
    @the_gadfly5717 Před rokem

    What if there are duplicates?

  • @rpalanivel83
    @rpalanivel83 Před rokem +3

    Thanks for the wonderful video. The code was not worked for me. It went infinite loop. I fixed the issue by adding i += 1 and j -= 1 after arr[i], arr[j] = arr[j], arr[i]

  • @theInspireVista
    @theInspireVista Před rokem

    Can you please upload the quick sort for worst case scenario with O(n^2) ?

    • @davidr.603
      @davidr.603 Před 11 měsíci

      That happena when the pivot element is either really big or really small not sure which it was, maybe both

  • @Hex-Scholar
    @Hex-Scholar Před rokem

    Could you please explain me what will the space complexity be ?

    • @77elite9
      @77elite9 Před 2 dny

      I may be late but Quicksort has O(logn) space complexity. This is due to the algorithm recursively calling itself which takes up space in memory because it must remember where it was in the previous levels of recursion. Because Quicksort on average has log base (4/3) of n recursion levels as that is the average partition for Quicksort and log base (4/3) of n is in O(logn), that is its space complexity.

  • @rdanimetalks7964
    @rdanimetalks7964 Před rokem

    Sirr where r urrr Videos... it's been a yearr...Did u quit???? 😭😭😭

  • @trl2006
    @trl2006 Před rokem

    Why return i?

  • @shootanees150
    @shootanees150 Před rokem +1

    Qulandar

  • @nkwellekwo8051
    @nkwellekwo8051 Před rokem +2

    Please why is J right -1?

    • @kummaridharmateja9593
      @kummaridharmateja9593 Před rokem

      right means size of array i.e, 8
      here index will start from 0th so array[last_ment] =>array[8]
      it means we dont have 8th element in array
      thats why right -1

  • @shashankdevadiga2646
    @shashankdevadiga2646 Před 10 měsíci

    I think it's ' j= right '

  • @aids_47_aditishetty84
    @aids_47_aditishetty84 Před 2 lety

    unbound local partition error

  • @THE-MNG
    @THE-MNG Před 3 lety +1

    I got an error when I use 100 elements of array

    • @Mc-os1yc
      @Mc-os1yc Před 2 lety

      I suppose it's stack overflow cuz it hits stack size of your system

  • @matissjansons8789
    @matissjansons8789 Před 6 měsíci +1

    how about this:
    def quicksort(arr):
    if len(arr) pivot]
    return quicksort(left) + middle + quicksort(right)

  • @shootanees150
    @shootanees150 Před rokem

    Dadu

  • @lucianaferrand64
    @lucianaferrand64 Před rokem

    ok, I posted a comment before that was incorrect. I was missing a piece of code - Works wonderfully - Here is another example in python of quickSort application
    Check my function below and works for any example of an array.
    def quickSort(dataset, first, last):
    if first < last:
    pivotIdx = partition(dataset, first, last)
    # now sort the two partitions
    quickSort(dataset, first, pivotIdx-1)
    quickSort(dataset, pivotIdx+1, last)
    def partition(datavalues, first, last):
    # choose the first item as the pivot value
    pivotvalue = datavalues[first]
    # establish the upper and lower indexes
    lower = first + 1
    upper = last
    # start searching for the crossing point
    done = False
    while not done:
    # TODO: advance the lower index
    while lower = lower:
    upper -= 1
    # TODO: if the two indexes cross, we have found the split point
    if upper < lower:
    done = True
    else: # if they haven't cross each other
    temp = datavalues[lower]
    datavalues[lower] = datavalues[upper]
    datavalues[upper] = temp
    temp = datavalues[first]
    datavalues[first] = datavalues[upper]
    datavalues[upper] = temp
    # return the split point index
    return upper
    # test the merge sort with data
    print(items)
    quickSort(items, 0, len(items)-1)
    print(items)

  • @walternathaniel7365
    @walternathaniel7365 Před 2 lety +3

    If you run the sorting function, the result is None. This is because the sorting function does not Return anything.
    You may want to edit your code.

    • @kimstuart7989
      @kimstuart7989 Před 2 lety

      works fine for me. It isn't returning anything because this algorithm is designed to be in-place and it is just modifying the original array itself. print your array, call quick_sort(), then print your same array again and you will see it sorted. If you want, you can add return arr at the end of your quick_sort function, then in your main call it using sorted_array = quick_sort(), but it's not necessary.

    • @reo4465
      @reo4465 Před rokem

      it will work just fine cause he is sending list as a parameter and that is passed by reference

  • @wannabehuman.production

    May you pillow be always cold on both sides