Quicksort Sort Algorithm in Java - Full Tutorial With Source

Поділитися
Вставка
  • Опубліковано 25 лис 2024

КОМЕНТАРІ • 307

  • @CodingWithJohn
    @CodingWithJohn  2 роки тому +124

    A few viewers have pointed out an issue where a value would be out of order in some situations. A couple of commenters, Wilson Barbosa and Yebo Qin, identified what the issue was and implemented fixes and noted them in comments below.
    I've included Wilson's fix in the linked code, so now it should all be working properly. Let me know if anyone notices anything else though.
    Thanks so much to everyone who saw this and proposed fixes! This community is clearly awesome. Also, this is why code reviews are a great idea!

    • @wbarbosabr
      @wbarbosabr 2 роки тому +16

      You're welcome, John! And keep up the good work!

    • @一颗星ykx
      @一颗星ykx 2 роки тому +8

      no probs, you ve done a great job !

    • @TuanBuianonymous
      @TuanBuianonymous 2 роки тому

      @@一颗星ykx which case is it? please give me example

    • @duytuannguyen8323
      @duytuannguyen8323 2 роки тому

      ​@@TuanBuianonymous 15:49, line 43. There's an edge case. It's not absolutely the pivot will smaller than the left pointer.

    • @goldfish-bloopbloop
      @goldfish-bloopbloop 2 роки тому

      @@duytuannguyen8323 thank you so much!

  • @ginom219
    @ginom219 3 роки тому +173

    Prepping for a coding interview in Java and I’ve gotta say, your videos are the best and easiest to follow that I’ve come across. Keep up the good work

  • @carlostitlan
    @carlostitlan Рік тому +2

    I only knew quicksort is the fastest. Now I know how it works and how to code it. I also practiced recursion. Thank you very much.

  • @vladimirgorlin7510
    @vladimirgorlin7510 2 роки тому +13

    It worths to mention that quicksort algoritm has in avarage O(nlog (n)) time complexity

  • @jondevlin4754
    @jondevlin4754 Рік тому +1

    Just watched two of your videos … have taught gifted grade 12 CS for years … now switching from C/C++ to Java …have just watched a couple of your videos … your communication is exemplary…so clear …

  • @MrDarshD
    @MrDarshD 3 роки тому +36

    Well explained with the array visualization and the actual code creation process. Highly appreciate your time and efforts, John! Thank you so much!

  • @quitchiboo
    @quitchiboo 2 роки тому +21

    Honestly the best tutorial on quicksort out there! I'd like to add: You don't have to use a number from the array as a pivot. You can calculate the median of the array and use that as the pivot, to queeze out even a little more performance.

    • @TuanBuianonymous
      @TuanBuianonymous 2 роки тому

      how to calculate the median of the array?

    • @quitchiboo
      @quitchiboo 2 роки тому +3

      @@TuanBuianonymous Count how many numbers you have. If you have an odd number, divide by 2 and round up to get the position of the median number. If you have an even number, divide by 2. Go to the number in that position and average it with the number in the next higher position to get the median.

    • @thanhtungtran8249
      @thanhtungtran8249 2 роки тому +5

      @@quitchiboo in an unsorted array, the median could be any number, such as the highest or lowest number, so it does not make the algorithm that much better

  • @ShermukhammadKarimov
    @ShermukhammadKarimov 5 місяців тому

    as i found about this channel, when i search for programming related content, i pray that John made a video for that topic, and when he did, I got very happy.

  • @shwimwhearz4819
    @shwimwhearz4819 2 роки тому +3

    Instant sub, no one breaks down theses concepts quite like you John. Glad a found this channel

  • @wiilwaal258
    @wiilwaal258 Рік тому

    I dont know how i can thank u.. It took me yrs and never understood quicksort .. With ur tutorials i understood everything clearly. Thanks man 🥰

  • @Dalcenn
    @Dalcenn 2 роки тому +9

    Seeing you explain this with the visuals made this so much more understandable than watching my professor do it on a chalkboard! Thank you for this explanation and the sample code. Another great video John.

  • @MTB_Bay_Area
    @MTB_Bay_Area 2 роки тому +1

    Thank you, it is helpful that you show how it is done on a text file and you are moving the numbers in the text boxes. it is good visualization of the process.

  • @codewithbug
    @codewithbug 7 місяців тому

    thank you, man. this is my fourth quick sort video and none of them are doing coding part. thank you, really.

  • @muhammadmuaaz3704
    @muhammadmuaaz3704 3 роки тому +2

    The explaination using the numbers was amazing bro I literally understoop every single word.

  • @AndrewLapteff
    @AndrewLapteff Рік тому +1

    BEST tutor about quicksort in universe!!!

  • @ralfiasz
    @ralfiasz 2 роки тому +2

    Definitely the best there is. Talking about your content obviously. You’ve helped me so much I couldn’t possibly thank you enough Sir!

  • @SatyaMantha
    @SatyaMantha Рік тому

    This is the best QuickSort Algo I have seen in UA-cam

  • @millerlou7294
    @millerlou7294 2 роки тому

    This video will only 30k+ views explains the concept clearer than all other more popular videos, this guys deserves more subs!

  • @Joshua-te1fg
    @Joshua-te1fg 2 роки тому

    This tutorials tips like over loading and eclipse method maker gave me so much joy

  • @morhakak1907
    @morhakak1907 3 роки тому +4

    Hi John,
    Your explanation was crystal clear + the last tweaks - the best quick sort tutorial on youtube right now.

  • @RK-zg9cd
    @RK-zg9cd 2 роки тому +1

    Thank you very much, John! I tried to find out working quicksort algorythm for Java, but the only one I found out has big bug. But thanks to you I won't be dropped out of my university))

  • @lindascoon4652
    @lindascoon4652 2 роки тому +1

    WOW, you have the talent of teacher. Thank you for making these videos.

  • @nobleman2704
    @nobleman2704 2 роки тому

    thanks for all, btw in jdk library when it comes to sorting, it uses DualPivotQuicksort sorting algorithm

  • @jimwang8997
    @jimwang8997 3 роки тому +4

    Thank you John, good job! in the second while loop, not need leftPointer < rightPointer, because the first while loop already have same code.

    • @UnfinishedYara
      @UnfinishedYara 2 роки тому

      I tried it myself and without leftPointer < rightPointer in the second loop you find that the array values are flipped, so the first one becomes the last and so on.

  • @kannanbalasubramani5541
    @kannanbalasubramani5541 Рік тому

    I wasn't this clear of quick sort before watching this one.. It helped a lot. thank you!

  • @mindofpaul9543
    @mindofpaul9543 2 роки тому +6

    Dude, You are so good at explaining these things! Thank you for making these more complicated parts of coding easier to understand for a novice like me!

  • @emekaukwuoma9507
    @emekaukwuoma9507 2 роки тому +5

    Thank you John, you have just taught me quick sort algorithm in a way that is clear and understandable. I enjoyed watching and learning from your videos.

  • @RAWRIHATEYOU1
    @RAWRIHATEYOU1 2 роки тому

    thank you so much John! I was getting really frustrated with myself because I've watched 3 quicksort tutorials, and the last video the comments were like "if you dont get it, you dont get it." felt really defeated but now I think I understand!! im currently a software engineer in test but I'd like to prepare for my future possibly as a swe. one of the videos I watched was choosing a pivot randomly in the array which had me like 🥴but this makes a lot more sense to me! kind of reminds me of binary search.

  • @maryamz215
    @maryamz215 11 місяців тому

    First time i actually understood this algorithm. thank you

  • @luanakimley2367
    @luanakimley2367 2 роки тому +7

    Thank you for these videos, they're the clearest I've found so far! Hope you keep making more 😄👍

  • @IsaacCode95
    @IsaacCode95 Рік тому +1

    great stuff! i really like your videos and the way you explain stuff!, i still had to rewatch this a second time to understand the code behind it, thank you!

  • @jonathancabral8124
    @jonathancabral8124 2 роки тому +2

    I was having difficulty to understand the logic behind the implementation and your explanation it’s really great. There is just one thing that I do not fully understand that is why choose a random pivot it’s better than always take the last or first element.

  • @natnal9587
    @natnal9587 Рік тому

    As usual, easy way to understand. I just got out of the class and our professor said it better to use the median for choosing the pivot. while choosing the pivot would it better time complexity if we do (left+right /2).

  • @siomarapantarotto
    @siomarapantarotto 2 роки тому +2

    Thanks so much, John! I loved the way you explained QuickSort. 😍

  • @ntc3337
    @ntc3337 2 роки тому +1

    This is great thanks! I've 4 years working experience but I'm studying for job interviews and I always find myself having to go back and learn DS&A stuff haha

  • @mockingbird3809
    @mockingbird3809 2 роки тому

    This is honestly the best explanation on entire UA-cam!

  • @XtremrulesO
    @XtremrulesO 2 роки тому +1

    Thanks John.
    For me, added the following line
    int pivotIndex = new Random().nextInt(highIndex - lowIndex) + lowIndex;
    makes it less efficient.

  • @ishank7239
    @ishank7239 2 роки тому

    When I watched this video for the first time, I was a bit hesitant to implement it this way. It was because of the nested "while" loops.
    It took some careful observation to understand that although there are inner while loops, we only go through the array once : O(n)
    Thanks for this clear explanation. 🙏🏽

  • @sibrimbarcenasreales5525
    @sibrimbarcenasreales5525 8 місяців тому

    You are a really good master, thanks i think this could took me weeks to understand it well, but you made it so easy !

  • @yaweno9555
    @yaweno9555 Рік тому +1

    Very well done video on quicksort with Java. I'm impressed with John as an instructor from this first video of his I watched. John explains things in a way that is easy to digest and comprehend. I came upon this one after a demo of quicksort in a Learn Haskell video. This review helped me better understand some of that foreign syntax in Haskell. I do have to say that Haskell does the quicksort in far fewer lines than Java.

  • @shahdadpeykani7641
    @shahdadpeykani7641 Рік тому

    Thank you sir, finally I could understand completely after watching 10 times 😂❤️

  • @ikennanana
    @ikennanana 2 роки тому

    Thank you so much for this video! You've really helped me get a grapsp on the QuickSort algorithm other than my professors over here...

  • @YerushalayimShelZahv
    @YerushalayimShelZahv 3 роки тому +3

    Big thank you for sharing and teaching. I wish you much success with your channel and hope you continue producing more content. I look forward to your videos!

  • @jeffreyslominsky7656
    @jeffreyslominsky7656 2 роки тому +1

    Your teaching is brilliant John, thank you for sharing!

  • @Urbaez22
    @Urbaez22 Рік тому

    Excellent video and explanation. I just add that when facing a StackOverflowError in Java, you can adjust the -Xss parameter to the JVM when booting up, to a larger value. By default I think it's 1024KB but can be set to whatever value necessary.. Thank you for your content..

  • @sarkaholendova9080
    @sarkaholendova9080 Рік тому

    You have helped me get through University. I appreciate you so much! :)

  • @kesarscorpio
    @kesarscorpio 2 роки тому

    pointing the pointers points a pointing image in my head :D thanks for the explanation, very useful.

  • @svalyavasvalyava9867
    @svalyavasvalyava9867 3 роки тому +12

    Your videos are educative and really fun to watch. Thanks for all the effort you put into the content!!!
    P.S. on 8:16 the rightPointer should point to the pivot element. However, your implementation was perfectly correct so this is not a big deal.

    • @CodingWithJohn
      @CodingWithJohn  3 роки тому +4

      Thanks! And you're right, I suppose that is off by one between the implementation and the demo there. The end result should be the same either way.

    • @__nitinkumar__
      @__nitinkumar__ 2 роки тому +4

      Thanks for that, I was implementing and had written the logic as
      int right = end -1;
      but in the John's implementation I saw it being as
      int right = end; // was a little confused here.

  • @namrathas5804
    @namrathas5804 Рік тому +1

    Thank you so much John, your videos are really a blessing to us. Its so easy to understand bcz of the visualization you make while explaining. thanks for your effort.

  • @kermitaner
    @kermitaner Рік тому

    This explanation of the quicksort algo is the best i've seen so far on YT. Maybe i try to implement it in Cobol on our mainframe next week, just for fun :- )

  • @АртемПоляков-т3х

    You're literally the best, thank you! Eagerly looking forward for new videos from you🤓

  • @jugalsingh5176
    @jugalsingh5176 2 роки тому +1

    Thank you for making us learn Java clearly and understand deeply😊

  • @coordinator3039
    @coordinator3039 2 роки тому

    I really needed this for my Pokemon practice code project

  • @pejko89
    @pejko89 2 роки тому

    I watched it last night, and I did it on my own this morning. I feel so powerful xD Although I know I could never come out with the solution on my own

  • @liatsahi
    @liatsahi 6 місяців тому

    Thank you for this explanation. thanks to you I understood brilliantly

  • @yavuzaydn6410
    @yavuzaydn6410 2 роки тому +2

    The explanation was amazing. Thank you John

  • @shankar7435
    @shankar7435 3 місяці тому

    Another quality content on UA-cam. Thanks a lot.❤❤❤

  • @heartoutloud7498
    @heartoutloud7498 2 роки тому

    Damn John. Im loving your videos man. You really clarify stuff which other tutors just ignore, that creates a lot of trouble. I actually would ask you if you could clarify the concept of returning. Plays a crucial role in coding and I miss the point of returning ometimes: "Does return close a program?" What is the point of returning is the return is void? " "Why do we have to return?" Thank for the great videos!

  • @abdurrouf4159
    @abdurrouf4159 2 роки тому +1

    Damn. Your presentation is too smart. I really fall in love on your teaching approch. I knew how the quicksort works. But, couldn't able to make understand others properly how this sorting algorithm works. You demostrated these things nicely.

  • @odaia.7519
    @odaia.7519 2 роки тому

    Wow that is so advanced and i understod, liked it. Thank you so much, hopfully one day would be able to create something like this after finishing my Study soon in 2 monthes

  • @funkyjunky845
    @funkyjunky845 8 місяців тому +1

    Yeah, that's a tutorial I was looking for!

  • @nehemie_n
    @nehemie_n 2 роки тому

    Clear and understandable way!
    Smooth and smart!

  • @mabeleain3320
    @mabeleain3320 Рік тому

    Thank you so much John. Best explanation I've ever seen.

  • @Jkauppa
    @Jkauppa Рік тому

    try median bucket sort, first find median, then split to two buckets O(n) for each pass, total sub-passes like a stable quick sort, always O(n log n) operations complexity

  • @temuryakhyoev5922
    @temuryakhyoev5922 2 роки тому

    I guess i found the best teacher for Java

  • @DarkLightning96
    @DarkLightning96 2 роки тому +4

    Great video, one of the best explanations of quicksort I've come across!
    It could've been better if at the end you compared quicksort with other sorting algorithms just to see the difference in the time it takes to sort arrays as they grow larger. Maybe you could do that in another video :)

  • @johnnyf1624
    @johnnyf1624 2 роки тому +1

    Thank you great explanation as always. we can add a condition before swap of left and right in case they are the same to prevent additional operation
    if (left != right) swap (numbers, left, right).
    also 21:34, line 30 n 31 the swap should happen before the assignment of pivot variable. rn your pivot variable is alrdy assign to random pivotIndex, the swapping doesn't do any good.

  • @kunalkheeva
    @kunalkheeva 2 роки тому

    Thank you john, I just need more clarification on time complexity

  • @emerson3070
    @emerson3070 3 роки тому +1

    Needs a few re-watching lol Thanks John!

  • @adhamkhaled5399
    @adhamkhaled5399 8 місяців тому +1

    Wow, just amazing!! Thank you so much.

  • @Zero-ul6vx
    @Zero-ul6vx 2 роки тому +1

    Bro we need a lesson on selection sort,
    And another on comparision between selection and insertion sort,
    And lastly overall comparison between all other sorting algorithm (insertion, selection, bubble, quick, merge, heap) in terms of time, space complexity and when to use.
    Thanks bro

  • @beksaylor
    @beksaylor 2 роки тому

    @Coding with John, You did a great job on this tutorial. Thank you very much.

  • @narendrakumariitb
    @narendrakumariitb 2 роки тому +1

    Thank you so much John💚. What a great teacher you are 👏

  • @JLSXMK8
    @JLSXMK8 3 роки тому +1

    My OMEN PC is able to sort 1 billion integers in Java!!! Wow!!! The thing's got some rapid power!

    • @CodingWithJohn
      @CodingWithJohn  3 роки тому +1

      Awesome! The amount of memory Java allocates to the stack definitely matters, and with a lot of stack memory you can sort crazy amounts of numbers. The modest laptop that I use when recording probably doesn't give Java a ton to work with.

    • @JLSXMK8
      @JLSXMK8 3 роки тому +1

      @@CodingWithJohn That's just what a modern gaming PC can do to help any CS student watching this channel.
      I tried implementing this in C++ however, and even though your implementation runs, "stack memory" gets corrupted. I also tried an implementation on an app that I downloaded ("Code Recipes Pro", available for iOS devices. The implementations for Java and Python work AWESOME on the latest versions of both languages.), and the allocator memory was corrupted.
      If you know of a channel that could possibly help, could you please reply with the UA-cam link for the corresponding video/channel? Thanks!

  • @zhihangzhou7141
    @zhihangzhou7141 2 роки тому

    Nice, didn’t fall asleep in all 24mins.

  • @samarthurs8000
    @samarthurs8000 2 роки тому +1

    Revisiting my engineering days at the university. Felt nostalgic after hearing the terms Pivot, Left pointer, Right Pointer, and the easy-peasy Swap method and of course the Quick sort, the fastest sorting algorithm, while its poor siblings like Bubble sort, Merge sort, Heap Sort, and so on suck big time with their efficiency. Great job John. Keep up the good work and keep inspiring the needy.

    • @jamess1775
      @jamess1775 2 роки тому

      did you just call merge sort inefficient??

  • @hallosf1396
    @hallosf1396 2 роки тому

    We're waitin for Heap Sort !! And thanks for your effort

  • @Garrison86
    @Garrison86 2 роки тому

    Awesome explanation! really appreciate the time taken to make these videos.

  • @NinjaRunningWild
    @NinjaRunningWild 2 роки тому

    *Excellent explanation.* Far better than my 7 books on Data Structures & Algorithms (yes, 7! I was a game programmer) including Sedgewick & Cormen’s.
    One thing though, _please_ consider using PasteBin or a link to a file as a source. That particular site is really finicky & picky with what it allows with what browser & doesn’t like mobile much at all.

    • @CodingWithJohn
      @CodingWithJohn  2 роки тому +1

      Thanks! Yeah I'm certainly not married to codepile for the sources. When I have some time I'll investigate other options.

  • @K.K.M.DEALWIS
    @K.K.M.DEALWIS 6 місяців тому

    your explanations are amazing

  • @anupamjoshi6077
    @anupamjoshi6077 2 роки тому

    Thank you so very much for helping me understand the concept as well as the implementation

    • @anupamjoshi6077
      @anupamjoshi6077 2 роки тому

      Also can we reduce one extra swap inside the while by surrounding it with an if condition which says that left pointer is not equal to right pointer

  • @abhishekkmr549
    @abhishekkmr549 2 роки тому

    Your channel is true gem..

  • @aleksandermoskov7799
    @aleksandermoskov7799 Рік тому

    you also have drums behind you... thats awesome

  • @adeyinkaolurin
    @adeyinkaolurin 2 роки тому

    Thank you John. Your explanation is very understandable...

  • @checkmate2625
    @checkmate2625 2 роки тому

    Hey man, Data structures and algorithms will become an interesting topic if everyone teaches like you.👍👍

  • @codeloners6820
    @codeloners6820 2 роки тому +1

    very understandable! you are amazing tutor! keep doing such a wonderful video!

  • @zeuss_2122
    @zeuss_2122 3 роки тому +2

    Thanks alot. My request was answered.

  • @schwaccc301
    @schwaccc301 Рік тому

    Best ever,! Thank you so much for sharing this!

  • @8acv8
    @8acv8 2 роки тому

    The best quick sort tutorial

  • @fredericoamigo
    @fredericoamigo Рік тому

    Thank you so much for this (and all of your other vids). You truly have an extraordinary ability to explain difficult things in an understandable and nicely communicated way.
    I simply love your vids! Keep up the good work!

  • @techy0716
    @techy0716 2 роки тому +1

    excellent. can you also give couple of minutes to discuss Time and Space complexity of such Algo problems in terms of big O please. I find your videos very useful and well explained along the way. Thank you.

    • @TheEskindir
      @TheEskindir 2 роки тому

      There are great lectures on MIT open courseware, that also cover quicksort's complexity along many others. Check them out. :)

  • @pinkymartini
    @pinkymartini 2 роки тому

    Oh man you are amazing. Clear explanation. You have rightfully earned a sub sir.

  • @rasa7778
    @rasa7778 Рік тому

    Thank you very, very much for your videos, they are very helpful for me. You are doing a great Job. ♥♥♥

  • @jaecheokkim99
    @jaecheokkim99 2 роки тому

    Very easy and clear explaination! Thank you so much.

  • @amarsarkar4925
    @amarsarkar4925 3 роки тому +1

    Was waiting for this ❤

    • @phekev
      @phekev 3 роки тому +2

      Me too. I'd recently watched the merge sort video and wanted a quicksort to compare it with.

  • @francksgenlecroyant
    @francksgenlecroyant 2 роки тому

    You're amazing John, i am your new subscriber! I'm enjoying your content

  • @ankitsingh7464
    @ankitsingh7464 2 роки тому

    I have only one word for you sir, Greaaat

  • @dondigidon1633
    @dondigidon1633 2 роки тому

    Really like your channel! Keep going, your are the best!🏆🏆🏆👍

  • @_Anna_Nass_
    @_Anna_Nass_ 2 роки тому

    Wish I had found this channel earlier. Great explanation once again, thanks!

  • @kiranmayiippili6058
    @kiranmayiippili6058 2 роки тому

    You are too good. Wonderful explanation. Thank you tons.