A collection of sorting algorithms implemented in Java
Travis CI | Codacy | Codecov |
---|---|---|
algorithm | source | info | type | class | time complexity | space complexity |
---|---|---|---|---|---|---|
Bubble Sort | source | info | comparison | exchange | O(n^2) | O(1) |
Counting Sort | source | info | non-comparison | distribution | O(n + k) | O(n + k) |
Heapsort | source | info | comparison | selection | O(n log n) | O(1) |
Insertion Sort | source | info | comparison | insertion | O(n^2) | O(1) |
JavaSort (internal) | source | info | comparison | merge or exchange | O(n log n) | O(n) |
Merge Sort | source | info | comparison | merge | O(n log n) | O(n) |
Quicksort | source | info | comparison | exchange | O(n log n) | O(n) |
Selection Sort | source | info | comparison | selection | O(n^2) | O(1) |
Feel free to copy and use the algorithms in your own projects! :-)
I've made special effort to document my code well.
You can either test the speeds of all of the algorithms at once, or test a single algorithm multiple times.
First, you need to choose if you want to test a single algorithm (1 to n times) or all of the algorithms in a row once.
If you chose to test a single algorithm, you'll specify which one next.
Then you are asked for an exponent. We'll raise 10 to this exponent to determine the size of the array (of integers) that will be created. For an example, if you choose 6, your array will have 10^6 = 1,000,000 integers.
After that, an array of integers is created in one of four different ways:
- integers in pseudorandom order, ex. [2, 0, 1]
- integers in ascending order, ex. [0, 1, 2]
- integers in descending order, ex [2, 1, 0]
- no fill (by default, the array will be full of zeros), ex. [0, 0, 0]
Once you have indicated how you want your new array to be filled, you're almost ready.
Again, if you chose to test only a single algorithm, you need to specify how many times you want to run the tests.
Now the sorting tests are run and the times are reported to the console.
Here's how the program flow looks like:
- include in-depth descriptions of each step in the algorithms
- refactoring
- implement more sorting algorithms