“Innnn the right corner, built by a team at Google DeepMind, the challenger with four straight victories in a row including two by technical deadlock. This brainy bot will put you Out Of Order, iiiiit’s AlphaSoooooooort!”
Should have implemented some of them with threads, as mergesort and quicksort are easy to parallelize and get much faster. For Quicksort, you don't even need synchronization.
@@Julianiolo yes that's true, but this is in general a measurement bias in this tournament. First we need longer numbers, as radix sort is O(n*m) with m being the number of digit's, while for other algorithms the number lengths is irrelevant. Also we need more numbers to gain actual data and we need them tested multiple times to get valuable data.
@@Julianiolo also there are python threads, but they indeed have a problem that they are often not executed in parallel but instead are reduced to linear code execution
@@morl1273 "threads" in python only help when dealing with i/o and similar, since they cant use multiple cores. Multiprocessing is kind of the equivalent for python, but that has other issues.
Awesome video! I think a potential factor in why the tournament results were a bit off comes from how the n value was changed from bracket to bracket. Because of the different time complexities, some sorting algorithms might work faster with smaller values and so they might start floundering as the list size increases.
Yeah I'm aware :). It's just kinda of frustrating that after learning about sorting algorithms in Python, there's just a function that does it like waaaay better than anything you could do in Python :)
Love content like this.... But I have one critique that was not mentioned in the video afaik. There's no "one size fits all" sorting algorithm, though some algorithms certainly are better than others in the majority of cases. Parameters like the size of the list, the type of data in the list and how the data in the list is ordered can make a major difference for example, as I'm relatively sure the wikipedia page on sorting algorithms points out. A truly fair competion as I see it would have categories. In one axis short, medium and long distance (aka n. I'd say n=1.000, n=100.000 and n=10.000.000), in another axis swimming, running and cycling (objects, strings and integers) and in the final axis a suny day, a windy day and a stormy day (almost sorted, fully random and p much reverse order). That being said, keep up the good work. ( ^ v^)b Ps: poor bogosort being called the worst when bogobogosort exists :P EDIT: meant to send as original post not reply xD oh well too late
@@Den_drummer Don't forget quantumbogosort. Randomise the list. In at least one universe (as per many worlds interpretation) the list is now sorted. If it is not sorted, destroy the universe you are in. You are now left in a universe where it is sorted (as per quantum immortality).
7:53 I believe merge sort is the only algorithm that can be parallelized for absurdly huge lists that need to be sorted, so it's still a winner at the end of the day... *looks at bogo sort*.
You should make different categories with different amounts of elements, for example 10, 100, 1k, 10k, 100k, ... and see how for example insertion sort dominates everything for the lowest category (if it is few enough elements), then quicksort dominates everything in the middle and then the big O complexity of radix sort enables it to outrun everyone else. Also, it would be in the spirit of Olympics because there are different sports (= different categories) Nice video though, you deserve way more subscribers!
Oh and maybe in the future, you could host some competition where people send their algorithms and you let them run and compare them, similar to what Sebastian Lague did with chessbots last summer. That way you would have plenty of algorithms and it could be a really interesting content that I have never seen before on UA-cam.
6:32 problem is that by selecting a bad pivot, quick sort could end up with O(n^2) time, so on average it would win but it could also lose, meanwhile the other algorithm is consistent.
1:32 well it may seem fast but technically a human can sort in O(n) time only having to look at numbers once, the main problem is how long the O part is.
I didn't knew this channel existed. That is a really good work. I presented it to beginners and they absolutely love it as I do. Directly subscribed. You need a really good job on this!
4:46 the insertion sort implementation here uses linear insertion, which is actually O(n^2) in the worst case time complexity (starting array is in descending order) it may have won against merge sort if it were implemented with binary search insertion. Also, fun fact about these two algorithms: with smaller arrays, insertion sort is faster than merge sort, but for larger arrays merge sort is much faster so a very clever sorting algorithm is to split an array into chunks, sort the chunks using insertion sort and then merge them all back into the final array. This is called Tim sort and is what's used by python's `sorted()` function
at 5:40 I think you chose Bubble sort instead of Radix sort EDIT: What was I thinking? It just says Bubble sort at the top, but the algorithm itself is Radix sort. EDIT 2: As I continued to watch the video, I realised that that whole section is quite confusing.
Yeah sorry about that :/. The editing for this video was a bit gruelling and I forgot to change the names of the algorithms (although the algorithms themselves are the correct ones).
While this is small enough that they probably won't bother you, I did want to let you know that the Olympics is a trademarked or copyrighted thing and they _do_ go after some creators. The one I'm thinking of is a really big one, the MarbleLympics (now Marble League). Not a criticism or saying you should change anything. Just thought I'd shoot you an fyi
I just wanna point out a few things: * Merge Sort is the best algorithm here. It is a comparison based algorithm, so it works for all values that can be compared including strings. It is actually faster than Quick sort. It runs in n log2 n in the WORST case, which is very fast. Quick sort runs in n loge n on average but slows down to n^2 in the WORST case. * Count sort is one of the fastest sorting algorithms out there, but it's not comparison based. It runs in n time in the worst case, which means that it will take about as much time as it takes to look at the entire input data. * Lastly, each algorithm exists for a specific purpose. Sometimes, you can use Count sort, but mostly you can't. It's not as simple as which is the fastest. Merge sort is, in my opinion, the best. PS: Radix sort and Postman sort are an extension of Count sort.
1:49 it's upside-down because the Y axis is orientated downwards. 2D graphics are like this probably because computers handle ordered things from left-to-right and top to bottom, like text.
Specifically, the more common radixsort is LSD radixsort, but MSD radixsort is somewhat common too. Least significant digit is what was used in the video, a unique effect is those last three iterations with the stair-looking things.
2:30 Actually, Bogo Sort's best case cenario is when the list is already sorted taking n-1 comparisons and could technically win and Merge Sort... 6th.
0:46 and, sorting algorithms are used ale the time! when you're on ebay, and you hit sort price low to high, it will use a sorting algorithm, and yeah, you get the point.
You seem to be having fun. What if you are sorting containers in a port. Now what matters is not really the number of swaps, but the total distance that the crane will have to travel because that crane is really slow. Is that going to impact which algorithm wins? I think it's time for container sort Olympics 😅
Actually, many sorting algorithms have complex behaviors, being able to detect when a sub set is getting slow, when that happens the sorting strategy changes
Every sorting algorithm has it's advantages and disadvantages, so it depends on the situation. If you have always a lot to sort, then one algorithm may be better, while if you have small amounts of data to sort, then another one may be better, etc. Also, even if algorithms have the same time complexity, they may differ with how good the best case is, etc. Also, just because one algorithm has a better time complexity, it may be worse than one with a worse time complexity if it does a lot of expansive calculations, and the one with the worse time complexity does less expensive calculations. ... Though bogo sort is always bad.
There is a talk by Andrey Alexandrescu, in which he briefly discusses it. Basically it's only faster for large arrays. The reasons are complicated, it's better to watch the original talk
The fact that bogosort is the fastest sorting algorithm in a quantum computer or an hpc system where all possibilities are tried by each computing unit at the same time 😎
Interesting. I have been developing a hardware level sorting technique, but I have been unable to finish my proof of concept because lack of software tools to emulate it. I am certain that its time to sort a list of numbers would be much faster than software implementations. since it does not use the CPU or RAM during the sort itself.
I'm also fan of merge sort and I even noticed at the begining of the video that you were using mergesort as example animation. You should try non-recursive version of it which is much faster, also you can make it even faster if you are using hybrid algorithm. You can first sort every for example 32 numbers using insert sort which is faster for smaller data (I didn't test if 32 is optimal it's just example) and then from that moment you can start merge sort. also it should be better to test it in compiled language like C, C++ or Rust because python has hudge overhead (it is possible for python algorithm to work even 40 or more times slower!) and this overhead can potentially be different for different algorithms.
Loved your video. Just tiny notes, Bucket sort is faster partly because it's a different class, The others presume your only operation is Comparisons. Bucket sort as you mentioned uses some element inspection which makes it leaps better, actually Counting sort might be the best here, since it'd sort the array in O(n) (not even that just plain 2n+c, I think), but in usual general cases where these are compared these two cannot be applied, which doesn't mean ofc that they aren't awesome, useful and shouldn't be mentioned. Second "like not supposed to be that good" is referring to asymptotic complexity which assumes the length of your inputs "approaches infinity". So sometimes bubble sort wins if you have like 3 elements. To make this fair and interesting you have to do probably millions of elements, otherwise the constants in those algorithms might trump the asymptotic complexity itself (which I guess depends if is relevant to you)
You are comparing algorithms that work for any data (that is, general ones) with those that only work for specific types of data. The first ones only use the "
Radix is an odd one there. There is a way to make it super slow with complicated data, or super fast with very simple inputs. I would say quicksort is the champion of the comparison sorts.
i have a bit of thoughts on this video 1. those single letter variables.... 2. yes i love comb sort or shell sort... idk it's hard to tell them apart Ӡ. pretty sure radix sort screws up when sorting floating point numbers 4. that pixel font has no descenders... AHHHHH
Radix sort is good in these cases, where data is in a small range of numbers, because it’s complexity is o(n + k) where k is the number of bits, but it isn’t good for large ranges, so the test case isn’t fair
5:40 Radix sort is bucket sort and bucket sort is bubble sort
Yeah that bugged me too.
I was about to comment that 😂
Why would you phrase it like that?
As soon as I saw bogo sort I was now way it’d hitting the 1 in 100 factorial chance lol
He got the spirit
There is a parallel universe where bogo sort won.
stalin sort going ham
@@dumbkian (Un)fortunately, there is no parallel universe where stalin sort won.
Quantum bogosort moment
if there are infinite parallel universes, there is a universe where bogo sort always works and nobody knows why
Always bet on bogosort
So you technically sorted the sorting algorithms
That's wild🤣🤣
Exactly my reaction when seeing this video😂
“And I used Quick sort to sort all of these sorting algorithms.
very meta
Next, make them *arm wrestle*…. Two sorting algorithms, one list; one trying to sort the list ascending, the other descending.
THAT IS SUCH A FUN IDEA!
“Innnn the right corner, built by a team at Google DeepMind, the challenger with four straight victories in a row including two by technical deadlock. This brainy bot will put you Out Of Order, iiiiit’s AlphaSoooooooort!”
I need this in my life djshisbd
Somewhat hard with some algorithms, like merge sort it is recursive, maybe each call revert it hm
That would b really funny with bogosort
Should have implemented some of them with threads, as mergesort and quicksort are easy to parallelize and get much faster. For Quicksort, you don't even need synchronization.
Didn't know that. So thank you for the info :)
at 100 elements using threads will probably be slower. Also this is in python where there are no threads :)
@@Julianiolo yes that's true, but this is in general a measurement bias in this tournament. First we need longer numbers, as radix sort is O(n*m) with m being the number of digit's, while for other algorithms the number lengths is irrelevant. Also we need more numbers to gain actual data and we need them tested multiple times to get valuable data.
@@Julianiolo also there are python threads, but they indeed have a problem that they are often not executed in parallel but instead are reduced to linear code execution
@@morl1273 "threads" in python only help when dealing with i/o and similar, since they cant use multiple cores. Multiprocessing is kind of the equivalent for python, but that has other issues.
There should be separate categories for algorithms that need extra memory, and ones that dont.
I know, but I didn't want to make the video more complicated
@@Green-Code And also which sort is stable and which is not. And which sorts have O(N) behaviour if the data is mostly sorted
Awesome video! I think a potential factor in why the tournament results were a bit off comes from how the n value was changed from bracket to bracket. Because of the different time complexities, some sorting algorithms might work faster with smaller values and so they might start floundering as the list size increases.
Bogosort is one of the fastest sorting algorithms if the shuffle is right first try.
The reason .sort() is faster than the other ones is because it was programmed in C, while the ones you made are in python.
Yeah I'm aware :). It's just kinda of frustrating that after learning about sorting algorithms in Python, there's just a function that does it like waaaay better than anything you could do in Python :)
@@Green-Code You could always do it in c++, but then you'd have to rename yourself Red-Code
Love content like this.... But I have one critique that was not mentioned in the video afaik.
There's no "one size fits all" sorting algorithm, though some algorithms certainly are better than others in the majority of cases. Parameters like the size of the list, the type of data in the list and how the data in the list is ordered can make a major difference for example, as I'm relatively sure the wikipedia page on sorting algorithms points out.
A truly fair competion as I see it would have categories. In one axis short, medium and long distance (aka n. I'd say n=1.000, n=100.000 and n=10.000.000), in another axis swimming, running and cycling (objects, strings and integers) and in the final axis a suny day, a windy day and a stormy day (almost sorted, fully random and p much reverse order).
That being said, keep up the good work. ( ^ v^)b
Ps: poor bogosort being called the worst when bogobogosort exists :P
EDIT: meant to send as original post not reply xD oh well too late
@@Green-Code It also uses timsort or powersort which are slightly better versions of mergesort!
@@Den_drummer Don't forget quantumbogosort.
Randomise the list.
In at least one universe (as per many worlds interpretation) the list is now sorted.
If it is not sorted, destroy the universe you are in.
You are now left in a universe where it is sorted (as per quantum immortality).
Very interesting. Thanks for your work. Looking forward to the next one.
Me: can we have code bullet? Mom: we have code bullet at home. Code bullet at home:
Great Video though
I was gonna say. Kinda like code bullet without the depression.
But still..
This guy is SICK.
All this guy needs to do is upload more than once every 6 months and he has Code Bullet beat
theres a universe where bogo sort is always the fastest.
7:53 I believe merge sort is the only algorithm that can be parallelized for absurdly huge lists that need to be sorted, so it's still a winner at the end of the day... *looks at bogo sort*.
in a perfect universe Bogosort wins everytime
The coolest part of this idea is that the people in this universe would have no idea why it’s always correct, it’d be a mystery.
You should make different categories with different amounts of elements, for example 10, 100, 1k, 10k, 100k, ... and see how for example insertion sort dominates everything for the lowest category (if it is few enough elements), then quicksort dominates everything in the middle and then the big O complexity of radix sort enables it to outrun everyone else.
Also, it would be in the spirit of Olympics because there are different sports (= different categories)
Nice video though, you deserve way more subscribers!
Oh and maybe in the future, you could host some competition where people send their algorithms and you let them run and compare them, similar to what Sebastian Lague did with chessbots last summer. That way you would have plenty of algorithms and it could be a really interesting content that I have never seen before on UA-cam.
@@redder358imagining the winner would be some maniac who wrote both a compression and decompression algorithm and packaged holygrailsort into 2KB
6:32 problem is that by selecting a bad pivot, quick sort could end up with O(n^2) time, so on average it would win but it could also lose, meanwhile the other algorithm is consistent.
This was a such a blast to watch :D
You should host a Nerd Olympics. I had never been more excited to watch sorting algorithms in my life! Good video.
I agree 100%
1:32 well it may seem fast but technically a human can sort in O(n) time only having to look at numbers once, the main problem is how long the O part is.
How can a human sort in O(n)?
I really like your character, and AAAAH YEAH MERGE SORT LOOKS COOL
I didn't knew this channel existed. That is a really good work. I presented it to beginners and they absolutely love it as I do. Directly subscribed. You need a really good job on this!
5:50 got me so confused, you speak about radixsort while showing bubble sort and bucket sort 😅
Exactly 💯
According to what I saw, he only forgot to rename the algorithms. Left is radixsort and right is bubble sort
This deserves more views. As a programmer, this is pretty investing and cool
I like watching random sorting algorithms, but it’s nice having someone talk about them while I watch
4:46 the insertion sort implementation here uses linear insertion, which is actually O(n^2) in the worst case time complexity (starting array is in descending order) it may have won against merge sort if it were implemented with binary search insertion.
Also, fun fact about these two algorithms: with smaller arrays, insertion sort is faster than merge sort, but for larger arrays merge sort is much faster so a very clever sorting algorithm is to split an array into chunks, sort the chunks using insertion sort and then merge them all back into the final array. This is called Tim sort and is what's used by python's `sorted()` function
As someone who just started learning Python (transitioning from MATLAB) it was super neat to see the syntax for the different scripts. Thanks!
at 5:40 I think you chose Bubble sort instead of Radix sort
EDIT: What was I thinking? It just says Bubble sort at the top, but the algorithm itself is Radix sort.
EDIT 2: As I continued to watch the video, I realised that that whole section is quite confusing.
I went through this exact process
Yeah sorry about that :/. The editing for this video was a bit gruelling and I forgot to change the names of the algorithms (although the algorithms themselves are the correct ones).
Bro fire video too too good loved it man the visualizing idea and the meme olympics way too good, love you brother
this is unfair
you should test different case,
and radix sort is just fast,but cannot use in real case.
gg man love the video
so cool to see the pivot visually move as quicksort shoves everything above/below it
While this is small enough that they probably won't bother you, I did want to let you know that the Olympics is a trademarked or copyrighted thing and they _do_ go after some creators. The one I'm thinking of is a really big one, the MarbleLympics (now Marble League). Not a criticism or saying you should change anything. Just thought I'd shoot you an fyi
3:45 really cool name😂
I just wanna point out a few things:
* Merge Sort is the best algorithm here. It is a comparison based algorithm, so it works for all values that can be compared including strings. It is actually faster than Quick sort. It runs in n log2 n in the WORST case, which is very fast. Quick sort runs in n loge n on average but slows down to n^2 in the WORST case.
* Count sort is one of the fastest sorting algorithms out there, but it's not comparison based. It runs in n time in the worst case, which means that it will take about as much time as it takes to look at the entire input data.
* Lastly, each algorithm exists for a specific purpose. Sometimes, you can use Count sort, but mostly you can't. It's not as simple as which is the fastest. Merge sort is, in my opinion, the best.
PS: Radix sort and Postman sort are an extension of Count sort.
1:49 it's upside-down because the Y axis is orientated downwards. 2D graphics are like this probably because computers handle ordered things from left-to-right and top to bottom, like text.
Specifically, the more common radixsort is LSD radixsort, but MSD radixsort is somewhat common too. Least significant digit is what was used in the video, a unique effect is those last three iterations with the stair-looking things.
5:40 its supposed to be radix vs bucket. but eh who cares, good vid my dude!
**squints eyes**
yep... that's definitely a video of Andrew Graves getting into coding...
Get this man a million subscribers
2:30 Actually, Bogo Sort's best case cenario is when the list is already sorted taking n-1 comparisons and could technically win and Merge Sort... 6th.
you should inplement sleep sort, with multi threading as it is fastest with small datasets, also at 5:49, it reads bucket sort, when its radix sort
if you put in an opposite-facing slope for Radix Sort LSD and put it at a specific time, it sounds pretty cool
Since my 3rd year in Computer Science, Merge Sort become my favorite sort algorithm
Bro gon ace every job interview
Quick sort and Merge sort are the GOATs
great video bruh 😂
0:46 and, sorting algorithms are used ale the time! when you're on ebay, and you hit sort price low to high, it will use a sorting algorithm, and yeah, you get the point.
wait? when you sort, it sorts? holy crap!
@ sort sorts.
Now you pushed me in the dillema that what algo does the sort function use to be fastest of all other algos
Bogosort just needs a little bit of luck just like me needing it to beat Steph Curry in a 3 point contest.
I didn't understand a word you said, but I was greatly intrigued.
You seem to be having fun. What if you are sorting containers in a port. Now what matters is not really the number of swaps, but the total distance that the crane will have to travel because that crane is really slow. Is that going to impact which algorithm wins? I think it's time for container sort Olympics 😅
Could you tell me what python module you use for the graphics?
Actually, many sorting algorithms have complex behaviors, being able to detect when a sub set is getting slow, when that happens the sorting strategy changes
Loved this video !!!!!!!!!!!
Every sorting algorithm has it's advantages and disadvantages, so it depends on the situation. If you have always a lot to sort, then one algorithm may be better, while if you have small amounts of data to sort, then another one may be better, etc. Also, even if algorithms have the same time complexity, they may differ with how good the best case is, etc. Also, just because one algorithm has a better time complexity, it may be worse than one with a worse time complexity if it does a lot of expansive calculations, and the one with the worse time complexity does less expensive calculations.
... Though bogo sort is always bad.
Some algorithms work quicker in large data, some work faster with less data.
I thought of one: check the biggest digits, then do the smaller ones.
you are a crazy guy how tf do you have patience to do all of it ?
You're a Fan of Code Bullet I see...
Good taste.
5:40 thats not right?
4:45 I wonder how insertion sort would do if binary search were implemented. But probabbly to that much better
There is a talk by Andrey Alexandrescu, in which he briefly discusses it. Basically it's only faster for large arrays. The reasons are complicated, it's better to watch the original talk
Remember, bogosort has an 1/100! chance to instantly win
where were you when i was getting cooked in DATA STRUCTURES & ALGORITHMS
Bogo sort has the potential to sort an array in linear time but it has one in billion chance of doing it.
yo the radix sort vs bucket sort part had the names from the previous round, make sure to watch your video before uploading
Radix sort looks insanely cool
But speaking of cool looking algorithms, there's gravity sort, which looks just crazy.
from one mergesort enjoyer to another 🤝
I now discover that there is something worse than bubble sort.
Bogo can, potentially, be the fasted one. It could happen that it just needs a single iteration.
.sort() in python, it uses "tim-sort" and it contains a mix between merge sort and insertion sort.
This video explains in full detail why I am single
Wow I actually was using a shitty sorting algorithm when I was scripting and ordering an array that had distances, I learned something...
You really put your Channel Description in binary😂 I respect that.
actually the shakersort is one of the fastest sorting algorithms when it comes to a bigger dataset
It is also important for the move ordering in the minimax with AB pruning
Add parallelism to merge sort for large amounts of elements.. and it rips everything else ☠️
codebullet but faster uploads, subscribed :3
They're multiplying
The fact that bogosort is the fastest sorting algorithm in a quantum computer or an hpc system where all possibilities are tried by each computing unit at the same time 😎
3:36 recursive means space complexity is not constant, right?
Interesting.
I have been developing a hardware level sorting technique, but I have been unable to finish my proof of concept because lack of software tools to emulate it. I am certain that its time to sort a list of numbers would be much faster than software implementations. since it does not use the CPU or RAM during the sort itself.
the only reason comb sort didn't make it to quarterfinals is because its opponent was radix sort
should've made em race in different categories like: small arrays, almost sorted arrays, extremely large arrays n so on
green code do you not realize at 5:40 you put bucket sort and bubble sort together from their titles above instead of "Radix sort" and "Bucket sort"
Radix sort can have very bad time complexity if the range K is clustered within the same bucket
I'm also fan of merge sort and I even noticed at the begining of the video that you were using mergesort as example animation.
You should try non-recursive version of it which is much faster, also you can make it even faster if you are using hybrid algorithm. You can first sort every for example 32 numbers using insert sort which is faster for smaller data (I didn't test if 32 is optimal it's just example) and then from that moment you can start merge sort.
also it should be better to test it in compiled language like C, C++ or Rust because python has hudge overhead (it is possible for python algorithm to work even 40 or more times slower!) and this overhead can potentially be different for different algorithms.
Loved your video. Just tiny notes,
Bucket sort is faster partly because it's a different class, The others presume your only operation is Comparisons. Bucket sort as you mentioned uses some element inspection which makes it leaps better, actually Counting sort might be the best here, since it'd sort the array in O(n) (not even that just plain 2n+c, I think), but in usual general cases where these are compared these two cannot be applied, which doesn't mean ofc that they aren't awesome, useful and shouldn't be mentioned.
Second "like not supposed to be that good" is referring to asymptotic complexity which assumes the length of your inputs "approaches infinity". So sometimes bubble sort wins if you have like 3 elements. To make this fair and interesting you have to do probably millions of elements, otherwise the constants in those algorithms might trump the asymptotic complexity itself (which I guess depends if is relevant to you)
I can use sorting algorythms to do my 6th grade math homework yay
You should add Counting Sort. It only works for positive integers (can easily be modified for negatives) though.
You are comparing algorithms that work for any data (that is, general ones) with those that only work for specific types of data. The first ones only use the "
those sounds are giving me anxiety
Radix is an odd one there. There is a way to make it super slow with complicated data, or super fast with very simple inputs. I would say quicksort is the champion of the comparison sorts.
Radix was my fav and i'm happy with the result
you haven't tried Wikisort or Grailsort? they are modifications of mergesort that are supposed to be fast, stable, and need no memory.
They're also awfully complicated to implement.
i have a bit of thoughts on this video
1. those single letter variables....
2. yes i love comb sort or shell sort... idk it's hard to tell them apart
Ӡ. pretty sure radix sort screws up when sorting floating point numbers
4. that pixel font has no descenders... AHHHHH
Next, try different data distributions, algorithms performance differ with it.
Bro forgot sleep sort 💔🙂
Love U bro
5:07 was kinda best, I guess
what are you using to visualize the sorting algorithms ?
Radix sort is good in these cases, where data is in a small range of numbers, because it’s complexity is o(n + k) where k is the number of bits, but it isn’t good for large ranges, so the test case isn’t fair
Thank you Code Bullet! Wait... Wrong channel sorry.