Wonderful explanation, I really like how you describe WHY you are doing things at each step. Many people create tutorial videos where they simply say "okay and now we do this to get it to compare how we want to" and don't say why they do it that way.
Hats off to you for explaining everything step by step, even the basic things like colon, every index. I'm a beginner with 3 weeks into python and i started my second course on FreeCodeCamp that's an interactive one with a lot harder projects than i ever done. This is my second recursion project, their variable naming was way too long and i was being overwhelmed with very long variable names. My code from project looks identical to yours and yet yours is so concise and easy to read. Recursion is still something that i'm struggling with, but i feel like this video got me closer to understanding it. Thank you!
This is an awesome video! I am doing the algorithms module on Khan Academy. I understood what i was suppose to do fairly easily. Khan Academy's challenge is in JS but was not understandable. I skipped through to the code example part and you explained this perfectly. I understood exactly why you were doing each line of code instantly. Putting this into practice may be a little harder but now i have a code example which is thoroughly commented in my own words to help me solve future problems using merge sort THANK YOU
Hi, thanks for the great explanation. I would just add one thing, although you explicitly mentioned the case of comparing equal numbers at 10:39, using the "less or equal" operator in line 15 instead of the "less" operator would make the algorithm stable. As an example, let's say we come across the values 3 and 3 in the left and right vector, respectively. A stable algorithm would put the 3 from the left vector first, which the algorithm in the video does not.
yeah really its very simple to understand the concept thanks dude for me before reaching to this video i think that merge sort is very hard to understand but when i saw this video i can say its very very simple thank you so much dude😊😊
Thanks for the clear explanation.But i have few questions. When we are calling the merged array(left_arr) function if my array is of length 1 for example. My code checks for the condition whether the length of my array is greater than 1 or not ie..if(len(arr)>1 and it will fail. When will it go to the first while conditions. Ex: 2,6,5,1,7,4,3 and my left_list=2 and right_lst=6 and now it will run array(left_arr) ie array(2) the condition is not satisfied here since my array length is equal to 1 so it will not go inside the loop right? Correct me if i am wrong since i am new to programming
Thanks for the video. However, I don't understand couple of things: 1) how come the code ever get to the line which starts with # merge comment if it is always sending array to the recursion in the case of len(array)>1 and if that condition is not satisfied it just returns the array (actually not because there is no return) so #merged comment and the rest of the code is never going to be executed. 2) Also, as I mentioned in the parantheses before, it returns "None" if I apply this code and if I add the return command (return array) at the end of the function, it gives wrong answer in which the array is not sorted correctly.
You're correct that the code only enters the merge section (# merge comment) when the length of the array is greater than 1, and it recursively calls merge_sort on the left and right halves of the array. However, the merge section is executed during the backtracking phase of the recursive calls. When the recursive calls start to return, they bring back smaller sorted subarrays. The merge section is responsible for combining these smaller sorted subarrays into a larger sorted array. So, the merge section is indeed executed during the recursive backtracking phase, not during the initial recursive calls. This is why the code is able to sort the array even though it might not seem immediately obvious. Regarding the issue with returning "None": In the provided code, the sorting is achieved by directly modifying the input array arr. Instead of returning the array, the sorting is done in-place, and the final sorted array is available directly in the arr variable. The original code sorts the array in-place, so there's no need to add a return statement at the end of the function. I hope this explanation helps :)
hey felix i'm abit confused regarding the last two while loops in which we are simply adding the remaining elements of either of the array if there are! how are we checking those remaining values for comparison?
This is the case where all the elements in the other array have already been added to the sorted array. If your left array is [1,2,4,5] and your right array is [2,3,1828,183885], then by the time you reach 1828 in the right array, all the elements in the left array will have already been sorted in the main array, so you can just add the last 2 elements of the right array without worrying about comparisons. Hope that helps :)
Awesome explanation, but based on how you implement it, the left side should be smaller in the example you give: Len = 7, 7//2 = 3. 0:3 captures the actual range of 0 thru 2, or the first 3 elements
kind sir: how come the merge_sort(left and right arr) don't take the result of the sort? That is so cool and a bit mind bending. I need to look closer to really see how your code words. It is like the recursion layers didn't matter. I don't even think it is because the arr main list is referencing the same address, as the reason. It is voodoo code, that is very fascinating! I gotta look closer at it. I hope you read this comment.. thx.
Probably the best videos I have seen on these basic algorithms on UA-cam. Keep up the awesome work! have learned so much from your videos!
Probably the best merge sort video on youtube....
Lot of people just confuse on this topic due to lack of clarity... even the experieenced ones
The algorithm in code form is not intuitive or trivial at all.
Been on YT for too long looking for exactly this, a simple implementation. Brilliant.
Your teaching method is so calm, it helps slow down my panic-stricken heart every time I start to code. Thanks!
Wonderful explanation, I really like how you describe WHY you are doing things at each step.
Many people create tutorial videos where they simply say "okay and now we do this to get it to compare how we want to" and don't say why they do it that way.
Clear, concise, thorough and simple algorithm. Finally understood this, thank you for your great explanation!
Hats off to you for explaining everything step by step, even the basic things like colon, every index. I'm a beginner with 3 weeks into python and i started my second course on FreeCodeCamp that's an interactive one with a lot harder projects than i ever done. This is my second recursion project, their variable naming was way too long and i was being overwhelmed with very long variable names. My code from project looks identical to yours and yet yours is so concise and easy to read. Recursion is still something that i'm struggling with, but i feel like this video got me closer to understanding it. Thank you!
read a comment that this is the best video on youtube for merge sort and i would like to say indeed it is the best
Its my first algorithm in my life and I am finally able to code it.
Thank you for your help.
The most clearly explained one. Great job! Thanks!
This was amazing, keep it up...
Thanks :)
This is an awesome video!
I am doing the algorithms module on Khan Academy. I understood what i was suppose to do fairly easily. Khan Academy's challenge is in JS but was not understandable.
I skipped through to the code example part and you explained this perfectly. I understood exactly why you were doing each line of code instantly.
Putting this into practice may be a little harder but now i have a code example which is thoroughly commented in my own words to help me solve future problems using merge sort
THANK YOU
Nice video Felix! I'm subscribed now. Keep doing tutorials because you're well-structured in explanation. Thank you!
This is really simple and elegant. I wish I found this video before battling with merge sort - Thanks
thank you so much this is what I call an explanation going straight forward to the point with all the important details this is a worth millions views
damnnn been struggling with this one
this is the best video one could possibly produce
Thanks mate
explanied so nicely ...understood after watching this vedio only.. mission accomplished!!
Best videos should reach more people. UA-cam should show this kind of videos in recommendations.
Highly recommended. Superb Explanation.
Exactly what I need right now
You explained this in such an easy way compared to my uni professor lol. I couldn't thank you enough for these vids!
thank you so much, You saved me, I tried to implement merge sort with C, but most of C tutorials make it complicated
Great explanation with a simple and clean code example. Appreciate the help!
This is the best explanation, I ever found on sorting . Thankyou sir!!
Great explanation. Remember to add the base case when len(arr)
Much better than the million videos out there just talking rubbish
Thank you! This was a great in-place solution. I would love to see you walk through a non-in-place solution.
excellent tutorial! right before my exam!
Very well explained. My algorithms class was terrible lol.
One of the simplest explanations for Mergesort. Thank you
finally understand, best explanation
Great explantion! Toll gemacht! 🙂 Danke Felix
Hi, thanks for the great explanation. I would just add one thing, although you explicitly mentioned the case of comparing equal numbers at 10:39, using the "less or equal" operator in line 15 instead of the "less" operator would make the algorithm stable. As an example, let's say we come across the values 3 and 3 in the left and right vector, respectively. A stable algorithm would put the 3 from the left vector first, which the algorithm in the video does not.
Bro u r amazing at explaining these! Best so far that I have found.
Best video ever I seen .Thank you 🙏
The explanation was so clean and easy to understand... Thank you 😄
Hey There! Thank you very much for explaining this algorithm. You made it so easy to understand. I appreciate it. Thank you!
you did an absolutely amazing job on explaining merge sort! im glad that i found ur vid!
Great video, thanks! It really helped me understand it. The way of splitting the lists was great, I hadn't thought of that
Grüße
i really like your videos
Thank you, the best guide ever
The best video of all the videos!
Fantastic! Thank you so much for the detailed explanation!
Great explanation and amazing presentation also! Thank you so much for sharing the knowledge!
I love sorting numbers! Thank you for the great tutorial
So informative! Big up from jp🇯🇵
yeah really its very simple to understand the concept thanks dude
for me before reaching to this video i think that merge sort is very hard to understand but when i saw this video i can say its very very simple
thank you so much dude😊😊
Well done, dude your explanation is very clear I understand your explanation. Keep upload more video on DSA. 🤘🤘please
best explanation yet thanks.
Thanks for the clear explanation.But i have few questions. When we are calling the merged array(left_arr) function if my array is of length 1 for example. My code checks for the condition whether the length of my array is greater than 1 or not ie..if(len(arr)>1 and it will fail. When will it go to the first while conditions. Ex: 2,6,5,1,7,4,3 and my left_list=2 and right_lst=6 and now it will run array(left_arr) ie array(2) the condition is not satisfied here since my array length is equal to 1 so it will not go inside the loop right? Correct me if i am wrong since i am new to programming
This is when the recursion will stop with the list values of 2 and 6 and the lines of code after the recursive calls will be executed.
Excellent explanation of the code. Super easy to understand the concept this way, thank you.
that was awsome, you've helped me so much
You are awesome for teaching like this. Thank you a lot
Sirrrr wonderfully explained.
just loved it.
You explain things so well, thank you!!!
Thanks for the video. However, I don't understand couple of things: 1) how come the code ever get to the line which starts with # merge comment if it is always sending array to the recursion in the case of len(array)>1 and if that condition is not satisfied it just returns the array (actually not because there is no return) so #merged comment and the rest of the code is never going to be executed. 2) Also, as I mentioned in the parantheses before, it returns "None" if I apply this code and if I add the return command (return array) at the end of the function, it gives wrong answer in which the array is not sorted correctly.
I have the same doubts! Did you sort them out?
@@gabrielvictorrusso5931 did you try it?
Yes, I did, I know it works wonderfully, but I need help to understsnd whats happening, otherwise I’m just learning code recipes
@@MahlakaSami Same issues.
You're correct that the code only enters the merge section (# merge comment) when the length of the array is greater than 1, and it recursively calls merge_sort on the left and right halves of the array. However, the merge section is executed during the backtracking phase of the recursive calls.
When the recursive calls start to return, they bring back smaller sorted subarrays. The merge section is responsible for combining these smaller sorted subarrays into a larger sorted array. So, the merge section is indeed executed during the recursive backtracking phase, not during the initial recursive calls. This is why the code is able to sort the array even though it might not seem immediately obvious.
Regarding the issue with returning "None":
In the provided code, the sorting is achieved by directly modifying the input array arr. Instead of returning the array, the sorting is done in-place, and the final sorted array is available directly in the arr variable.
The original code sorts the array in-place, so there's no need to add a return statement at the end of the function.
I hope this explanation helps :)
Thanks, the explanation helped me a lot.
Why does the function have no return
love ur lucid explanation❤❤❤❤❤
thank you, I finally understood the merging step.
Very Easy to learn. Thanks
Was very helpful in the last minute
very nicely explained merge sort.
Absolutely amazing. Thank you, thank you, thank you.
actually this is very simple and wow explanation
brilliant explanation, Hats off
great video with details and simplicity, thank you!
perfect video. 10/10
Thank you, this was a super useful video!
Great explanation. Thanks.
Neat clean and concise
Thanks for these videos felix!!
At 9:50, in line 15, adding an equality to the if condition ensures that the the sorting algorithm is stable too...
I Loved It So Much.. Good Luck
You've done more for mankind then democracy ever has.
thank you! very easy to understand explanation
Very clear! Thank you very much
Cool realization!
Simply Beautiful, thank you.
hey felix i'm abit confused regarding the last two while loops in which we are simply adding the remaining elements of either of the array if there are! how are we checking those remaining values for comparison?
This is the case where all the elements in the other array have already been added to the sorted array. If your left array is [1,2,4,5] and your right array is [2,3,1828,183885], then by the time you reach 1828 in the right array, all the elements in the left array will have already been sorted in the main array, so you can just add the last 2 elements of the right array without worrying about comparisons. Hope that helps :)
Great video bro... keep it up👌🤙
can u make count inversion video pls .........this is very nice explanation
Great Video please make data structure and algorithms full series playlist
such a nice explanation thankyou
in minute 6 you said seven ? its thats means 5 ? yes or no?
so this is why you Germans are so good at engineering. such a thorough explanation!
in this code there is an issue where u should put a base case before the while loop
if len(l1)
awesome explanation
thanks for this great explanation
Is O(n) the time complexity of this code or is it O(nlogn)?
Awesome explanation, but based on how you implement it, the left side should be smaller in the example you give: Len = 7, 7//2 = 3. 0:3 captures the actual range of 0 thru 2, or the first 3 elements
Very easy to understand thx!
kind sir: how come the merge_sort(left and right arr) don't take the result of the sort? That is so cool and a bit mind bending. I need to look closer to really see how your code words. It is like the recursion layers didn't matter. I don't even think it is because the arr main list is referencing the same address, as the reason. It is voodoo code, that is very fascinating! I gotta look closer at it. I hope you read this comment.. thx.
Wow man ur underrated!!
Great video keep it up
Thanks for sharing!
Y u don't show the results in screen
I have a question about your method. Is this fully recursive? Seems like only the first part.
how is array of size one already sorted, I can't understand that part
well how can it be unsorted, for example a list of one: [25] cant be out of order because theres only one element
Awesome tutorial
Hi Team, in the line 2, it is giving me runtime error, stating mximum depth recursion comparison