-
Notifications
You must be signed in to change notification settings - Fork 0
Assignment 4 Sorting Algorithms
shanmuga sudan edited this page Aug 2, 2017
·
2 revisions
-
Strategy Design Pattern:
Declare a behavior as Interface and dynamically decide the behavior based on user requirement. Here, I create an interface sortable that is implemented by all the algorithms I have taken up for consideration. -
Steps Performed for the Assignment 4:
- Created My Sort class through which the sorting algorithms are called.
- Created an interface sortable that holds signature of sort methods.
- Created different classes one each for a sorting algorithm and implemented sortable interface.
- Created an array to load input size ranging from 10,000 to 1,000,000.
- Created an array every time with a input range.
- Created a function to perform knuth shuffle on the created array.
- Created a function to generate random numbers for the given count.
- Created a method that calls every algorithm for the newly created input array.
- Scenarios considered:
- Created a partially sorted array by performing Knuth Shuffle.
Yates_shuffle#Implementation_errors (https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Implementation_errors)This link helped me understand the nuances in Knuth shuffle.
profiling-sorting-algorithms-against-partially-sorted-data(http://stackoverflow.com/questions/5113158/profiling-sorting-algorithms-against-partially-sorted-data) - Created a random array by using random function in java.
- Created an ascending sorted array using Arrays.sort() method in java.
- Algorithms Considered:
- Quick Sort
- Merge Sort
- Insertion Sort
- Selection Sort
- Heap Sort
- Intro Sort (a hybrid sorting algorithm for efficient sorting)
-
Intro Sort:
Intro sort is a hybrid sorting algorithm that combines heap sort and quick sort. I have done a detailed analysis on sorting algorithms and came across the below links which were really helpful.
Introsort- wikisource(https://en.wikipedia.org/wiki/Introsort)
Hybrid_algorithm-wiki_source(https://en.wikipedia.org/wiki/Hybrid_algorithm)
It begins with quick sort and switches to heap sort once the recursion depth exceeds logarithm of elements sorted. The best, average, worst case run time for this sort is n log n where n is the number of inputs.
I also did a brief research on TimSort that was adapted to Java SE 7 from Python 2.3. I figured out that Arrays.sort uses Timsort for sorting elements of reference type.
is-java-7-using-tim-sort-for-the-method-arrays-sort ?(http://stackoverflow.com/questions/4018332/is-java-7-using-tim-sort-for-the-method-arrays-sort)
- Run time Analysis:
I spreadsheet provides the runtime analysis of all the sorting algorithms considered
Quick Sort:
Input Size | Time in ms (Partially Sorted) | Time in ms Random | Time in ms Sorted |
---|---|---|---|
10000 | 0 | 0 | 0 |
20000 | 0 | 0 | 0 |
30000 | 0 | 1 | 0 |
40000 | 0 | 1 | 0 |
50000 | 3 | 2 | 0 |
60000 | 1 | 1 | 0 |
70000 | 1 | 2 | 0 |
80000 | 1 | 1 | 0 |
90000 | 4 | 3 | 0 |
100000 | 3 | 3 | 2 |
110000 | 2 | 3 | 1 |
120000 | 3 | 3 | 1 |
130000 | 4 | 4 | 1 |
140000 | 4 | 5 | 1 |
150000 | 5 | 5 | 2 |
160000 | 5 | 5 | 2 |
170000 | 6 | 4 | 1 |
180000 | 9 | 7 | 2 |
190000 | 11 | 6 | 1 |
200000 | 6 | 5 | 2 |
210000 | 7 | 7 | 3 |
220000 | 7 | 8 | 3 |
230000 | 7 | 7 | 3 |
240000 | 9 | 9 | 4 |
250000 | 9 | 9 | 4 |
260000 | 12 | 8 | 5 |
270000 | 10 | 10 | 5 |
280000 | 11 | 8 | 4 |
290000 | 12 | 9 | 3 |
300000 | 10 | 10 | 4 |
310000 | 10 | 11 | 4 |
320000 | 10 | 11 | 6 |
330000 | 11 | 11 | 7 |
340000 | 11 | 13 | 8 |
350000 | 11 | 14 | 8 |
360000 | 12 | 12 | 8 |
370000 | 12 | 12 | 9 |
380000 | 13 | 14 | 10 |
390000 | 17 | 11 | 8 |
400000 | 26 | 12 | 9 |
410000 | 28 | 13 | 7 |
420000 | 29 | 14 | 10 |
430000 | 30 | 16 | 11 |
440000 | 29 | 17 | 12 |
450000 | 29 | 18 | 13 |
460000 | 33 | 15 | 12 |
470000 | 35 | 19 | 13 |
480000 | 34 | 19 | 14 |
490000 | 30 | 21 | 15 |
500000 | 33 | 24 | 16 |
510000 | 36 | 26 | 14 |
520000 | 31 | 28 | 13 |
530000 | 35 | 24 | 15 |
540000 | 35 | 25 | 16 |
550000 | 33 | 26 | 17 |
560000 | 37 | 28 | 18 |
570000 | 38 | 27 | 15 |
580000 | 35 | 24 | 15 |
590000 | 33 | 26 | 15 |
600000 | 34 | 28 | 14 |
610000 | 42 | 30 | 16 |
620000 | 39 | 30 | 14 |
630000 | 37 | 31 | 18 |
640000 | 40 | 28 | 14 |
650000 | 36 | 32 | 18 |
660000 | 36 | 36 | 16 |
670000 | 40 | 30 | 16 |
680000 | 33 | 34 | 17 |
690000 | 44 | 35 | 18 |
700000 | 46 | 32 | 15 |
710000 | 40 | 31 | 16 |
720000 | 46 | 30 | 17 |
730000 | 41 | 32 | 18 |
740000 | 36 | 35 | 17 |
750000 | 41 | 34 | 16 |
760000 | 46 | 33 | 18 |
770000 | 46 | 35 | 17 |
780000 | 39 | 36 | 18 |
790000 | 41 | 31 | 20 |
800000 | 46 | 32 | 21 |
810000 | 43 | 32 | 22 |
820000 | 42 | 35 | 21 |
830000 | 45 | 36 | 22 |
840000 | 50 | 34 | 22 |
850000 | 44 | 35 | 22 |
860000 | 42 | 35 | 22 |
870000 | 44 | 36 | 22 |
880000 | 47 | 37 | 22 |
890000 | 49 | 39 | 22 |
900000 | 54 | 38 | 21 |
910000 | 46 | 35 | 22 |
920000 | 51 | 36 | 23 |
930000 | 53 | 36 | 22 |
940000 | 48 | 37 | 22 |
950000 | 57 | 38 | 22 |
960000 | 54 | 40 | 21 |
970000 | 58 | 38 | 24 |
980000 | 56 | 40 | 22 |
990000 | 58 | 42 | 22 |
1000000 | 59 | 40 | 25 |
Merge Sort:
Input Size | Time in ms (Partially Sorted) | Time in ms Random | Time in ms Sorted |
---|---|---|---|
10000 | 1 | 1 | 0 |
20000 | 0 | 1 | 0 |
30000 | 0 | 0 | 0 |
40000 | 1 | 2 | 0 |
50000 | 1 | 3 | 2 |
60000 | 1 | 4 | 3 |
70000 | 2 | 3 | 1 |
80000 | 2 | 5 | 3 |
90000 | 2 | 4 | 3 |
100000 | 5 | 6 | 4 |
110000 | 3 | 8 | 5 |
120000 | 4 | 7 | 5 |
130000 | 7 | 8 | 6 |
140000 | 6 | 9 | 7 |
150000 | 5 | 7 | 8 |
160000 | 6 | 8 | 7 |
170000 | 9 | 7 | 9 |
180000 | 9 | 8 | 7 |
190000 | 8 | 9 | 8 |
200000 | 7 | 9 | 10 |
210000 | 8 | 7 | 8 |
220000 | 17 | 7 | 7 |
230000 | 9 | 10 | 9 |
240000 | 11 | 11 | 11 |
250000 | 20 | 10 | 8 |
260000 | 16 | 11 | 9 |
270000 | 13 | 12 | 11 |
280000 | 13 | 14 | 14 |
290000 | 14 | 12 | 12 |
300000 | 11 | 13 | 13 |
310000 | 12 | 11 | 14 |
320000 | 12 | 12 | 15 |
330000 | 13 | 15 | 16 |
340000 | 14 | 17 | 17 |
350000 | 14 | 14 | 10 |
360000 | 18 | 16 | 15 |
370000 | 15 | 18 | 14 |
380000 | 16 | 19 | 13 |
390000 | 16 | 20 | 15 |
400000 | 17 | 15 | 18 |
410000 | 17 | 16 | 18 |
420000 | 18 | 18 | 17 |
430000 | 17 | 19 | 19 |
440000 | 18 | 17 | 21 |
450000 | 18 | 21 | 22 |
460000 | 19 | 23 | 20 |
470000 | 20 | 25 | 21 |
480000 | 21 | 27 | 22 |
490000 | 23 | 26 | 23 |
500000 | 25 | 25 | 24 |
510000 | 25 | 25 | 22 |
520000 | 21 | 23 | 23 |
530000 | 23 | 25 | 25 |
540000 | 24 | 26 | 22 |
550000 | 25 | 26 | 23 |
560000 | 24 | 27 | 25 |
570000 | 26 | 28 | 24 |
580000 | 24 | 29 | 23 |
590000 | 28 | 30 | 25 |
600000 | 29 | 28 | 23 |
610000 | 27 | 27 | 24 |
620000 | 29 | 29 | 26 |
630000 | 30 | 28 | 23 |
640000 | 31 | 27 | 25 |
650000 | 32 | 30 | 25 |
660000 | 31 | 28 | 24 |
670000 | 29 | 29 | 23 |
680000 | 30 | 38 | 23 |
690000 | 32 | 37 | 24 |
700000 | 35 | 36 | 23 |
710000 | 34 | 34 | 24 |
720000 | 36 | 39 | 23 |
730000 | 32 | 41 | 24 |
740000 | 35 | 44 | 25 |
750000 | 36 | 42 | 25 |
760000 | 34 | 38 | 26 |
770000 | 38 | 39 | 24 |
780000 | 37 | 38 | 24 |
790000 | 9 | 48 | 24 |
800000 | 38 | 45 | 26 |
810000 | 35 | 50 | 25 |
820000 | 36 | 52 | 26 |
830000 | 37 | 53 | 25 |
840000 | 42 | 54 | 25 |
850000 | 43 | 56 | 24 |
860000 | 45 | 58 | 26 |
870000 | 44 | 57 | 22 |
880000 | 47 | 54 | 23 |
890000 | 48 | 56 | 24 |
900000 | 49 | 53 | 24 |
910000 | 46 | 51 | 25 |
920000 | 48 | 52 | 23 |
930000 | 50 | 53 | 25 |
940000 | 57 | 58 | 26 |
950000 | 52 | 57 | 26 |
960000 | 55 | 56 | 24 |
970000 | 55 | 53 | 25 |
980000 | 58 | 54 | 24 |
990000 | 59 | 54 | 26 |
1000000 | 66 | 58 | 26 |
Heap Sort:
Input Size | Time in ms (Partially Sorted) | Time in ms Random | Time in ms Sorted |
---|---|---|---|
10000 | 1 | 1 | 2 |
20000 | 1 | 1 | 2 |
30000 | 2 | 2 | 4 |
40000 | 3 | 3 | 3 |
50000 | 5 | 4 | 4 |
60000 | 5 | 2 | 5 |
70000 | 6 | 3 | 6 |
80000 | 7 | 6 | 8 |
90000 | 11 | 8 | 9 |
100000 | 10 | 10 | 10 |
110000 | 10 | 11 | 10 |
120000 | 11 | 13 | 11 |
130000 | 26 | 14 | 13 |
140000 | 22 | 15 | 14 |
150000 | 17 | 16 | 15 |
160000 | 21 | 17 | 16 |
170000 | 17 | 18 | 18 |
180000 | 22 | 19 | 17 |
190000 | 27 | 19 | 19 |
200000 | 22 | 20 | 20 |
210000 | 22 | 25 | 21 |
220000 | 34 | 23 | 23 |
230000 | 23 | 23 | 24 |
240000 | 39 | 26 | 26 |
250000 | 34 | 28 | 27 |
260000 | 40 | 30 | 28 |
270000 | 35 | 32 | 29 |
280000 | 42 | 33 | 30 |
290000 | 40 | 36 | 31 |
300000 | 31 | 35 | 35 |
310000 | 33 | 34 | 35 |
320000 | 35 | 36 | 36 |
330000 | 46 | 38 | 36 |
340000 | 40 | 40 | 37 |
350000 | 38 | 43 | 39 |
360000 | 41 | 45 | 39 |
370000 | 45 | 48 | 40 |
380000 | 43 | 47 | 42 |
390000 | 14 | 49 | 45 |
400000 | 40 | 48 | 44 |
410000 | 45 | 49 | 43 |
420000 | 47 | 50 | 45 |
430000 | 48 | 50 | 46 |
440000 | 54 | 52 | 48 |
450000 | 56 | 53 | 47 |
460000 | 57 | 56 | 49 |
470000 | 58 | 57 | 50 |
480000 | 57 | 58 | 51 |
490000 | 56 | 57 | 53 |
500000 | 52 | 58 | 54 |
510000 | 58 | 59 | 56 |
520000 | 58 | 62 | 55 |
530000 | 62 | 63 | 55 |
540000 | 63 | 64 | 56 |
550000 | 61 | 65 | 58 |
560000 | 60 | 69 | 61 |
570000 | 62 | 68 | 63 |
580000 | 63 | 67 | 65 |
590000 | 64 | 69 | 63 |
600000 | 65 | 74 | 68 |
610000 | 63 | 72 | 69 |
620000 | 63 | 71 | 70 |
630000 | 62 | 70 | 71 |
640000 | 65 | 72 | 72 |
650000 | 70 | 74 | 74 |
660000 | 72 | 76 | 75 |
670000 | 75 | 78 | 75 |
680000 | 79 | 81 | 76 |
690000 | 82 | 83 | 78 |
700000 | 84 | 86 | 79 |
710000 | 86 | 89 | 81 |
720000 | 87 | 93 | 83 |
730000 | 89 | 94 | 85 |
740000 | 90 | 96 | 84 |
750000 | 95 | 95 | 83 |
760000 | 93 | 96 | 86 |
770000 | 94 | 96 | 85 |
780000 | 109 | 99 | 84 |
790000 | 103 | 98 | 83 |
800000 | 105 | 105 | 87 |
810000 | 104 | 105 | 90 |
820000 | 105 | 106 | 92 |
830000 | 106 | 108 | 93 |
840000 | 110 | 110 | 94 |
850000 | 112 | 111 | 95 |
860000 | 118 | 112 | 96 |
870000 | 117 | 115 | 97 |
880000 | 114 | 118 | 98 |
890000 | 120 | 119 | 99 |
900000 | 124 | 120 | 100 |
910000 | 123 | 121 | 100 |
920000 | 126 | 123 | 102 |
930000 | 128 | 124 | 104 |
940000 | 130 | 125 | 105 |
950000 | 135 | 123 | 108 |
960000 | 134 | 127 | 108 |
970000 | 135 | 123 | 110 |
980000 | 136 | 126 | 114 |
990000 | 137 | 126 | 118 |
1000000 | 139 | 128 | 120 |
Intro Sort
Input Size | Time in ms (Partially Sorted) | Time in ms Random | Time in ms Sorted |
---|---|---|---|
10000 | 0 | 0 | 0 |
20000 | 0 | 1 | 0 |
30000 | 0 | 2 | 0 |
40000 | 2 | 0 | 0 |
50000 | 0 | 0 | 0 |
60000 | 0 | 3 | 0 |
70000 | 0 | 0 | 0 |
80000 | 0 | 1 | 0 |
90000 | 1 | 1 | 0 |
100000 | 1 | 5 | 1 |
110000 | 1 | 4 | 1 |
120000 | 1 | 6 | 1 |
130000 | 2 | 4 | 1 |
140000 | 2 | 3 | 1 |
150000 | 6 | 5 | 1 |
160000 | 3 | 4 | 1 |
170000 | 3 | 3 | 1 |
180000 | 3 | 5 | 1 |
190000 | 3 | 6 | 1 |
200000 | 6 | 7 | 2 |
210000 | 3 | 9 | 3 |
220000 | 3 | 8 | 3 |
230000 | 5 | 8 | 5 |
240000 | 7 | 7 | 6 |
250000 | 5 | 6 | 4 |
260000 | 5 | 8 | 7 |
270000 | 6 | 8 | 8 |
280000 | 9 | 7 | 8 |
290000 | 7 | 8 | 8 |
300000 | 6 | 9 | 8 |
310000 | 6 | 9 | 8 |
320000 | 6 | 9 | 8 |
330000 | 6 | 9 | 8 |
340000 | 6 | 7 | 8 |
350000 | 7 | 10 | 8 |
360000 | 7 | 10 | 8 |
370000 | 7 | 10 | 8 |
380000 | 12 | 10 | 10 |
390000 | 9 | 10 | 9 |
400000 | 10 | 10 | 10 |
410000 | 11 | 15 | 11 |
420000 | 12 | 13 | 14 |
430000 | 13 | 15 | 13 |
440000 | 14 | 14 | 13 |
450000 | 15 | 13 | 13 |
460000 | 12 | 15 | 13 |
470000 | 13 | 16 | 11 |
480000 | 15 | 14 | 12 |
490000 | 14 | 12 | 14 |
500000 | 13 | 14 | 9 |
510000 | 13 | 13 | 7 |
520000 | 13 | 15 | 8 |
530000 | 13 | 14 | 11 |
540000 | 15 | 13 | 12 |
550000 | 14 | 14 | 13 |
560000 | 16 | 17 | 14 |
570000 | 18 | 18 | 13 |
580000 | 17 | 17 | 16 |
590000 | 18 | 16 | 13 |
600000 | 19 | 15 | 13 |
610000 | 21 | 16 | 14 |
620000 | 23 | 14 | 13 |
630000 | 25 | 12 | 13 |
640000 | 24 | 13 | 13 |
650000 | 23 | 15 | 15 |
660000 | 22 | 15 | 18 |
670000 | 18 | 13 | 13 |
680000 | 19 | 10 | 11 |
690000 | 17 | 14 | 14 |
700000 | 18 | 13 | 11 |
710000 | 20 | 10 | 12 |
720000 | 23 | 10 | 16 |
730000 | 21 | 15 | 14 |
740000 | 22 | 16 | 13 |
750000 | 22 | 18 | 13 |
760000 | 22 | 21 | 15 |
770000 | 21 | 22 | 14 |
780000 | 18 | 23 | 13 |
790000 | 19 | 24 | 16 |
800000 | 18 | 25 | 13 |
810000 | 19 | 24 | 12 |
820000 | 20 | 26 | 15 |
830000 | 20 | 25 | 14 |
840000 | 20 | 24 | 13 |
850000 | 21 | 23 | 16 |
860000 | 23 | 25 | 17 |
870000 | 22 | 27 | 18 |
880000 | 21 | 28 | 14 |
890000 | 22 | 24 | 11 |
900000 | 23 | 26 | 12 |
910000 | 22 | 28 | 13 |
920000 | 21 | 24 | 14 |
930000 | 25 | 25 | 11 |
940000 | 24 | 26 | 16 |
950000 | 23 | 24 | 17 |
960000 | 25 | 23 | 18 |
970000 | 24 | 24 | 13 |
980000 | 23 | 28 | 13 |
990000 | 24 | 28 | 14 |
1000000 | 31 | 29 | 18 |
Graphical representation of time-complexity: