@@ -150,6 +150,85 @@ const SortAlgo = {
150
150
sort ( this ) ;
151
151
} ,
152
152
153
+ //Merge Sort methods to perform merge sort algorithm
154
+ mergeSort ( ) {
155
+ const timer = ( ms ) => new Promise ( ( res ) => setTimeout ( res , ms ) ) ;
156
+
157
+ // async function for selection sort algorithm
158
+ async function sort ( self ) {
159
+ function merge ( arr , l , m , r ) {
160
+ var n1 = m - l + 1 ;
161
+ var n2 = r - m ;
162
+
163
+ // Create temp arrays
164
+ var L = new Array ( n1 ) ;
165
+ var R = new Array ( n2 ) ;
166
+
167
+ // Copy data to temp arrays L[] and R[]
168
+ for ( var i = 0 ; i < n1 ; i ++ ) L [ i ] = arr [ l + i ] ;
169
+ for ( var j = 0 ; j < n2 ; j ++ ) R [ j ] = arr [ m + 1 + j ] ;
170
+
171
+ // Merge the temp arrays back into arr[l..r]
172
+
173
+ // Initial index of first subarray
174
+ var i = 0 ;
175
+
176
+ // Initial index of second subarray
177
+ var j = 0 ;
178
+
179
+ // Initial index of merged subarray
180
+ var k = l ;
181
+
182
+ while ( i < n1 && j < n2 ) {
183
+ if ( L [ i ] <= R [ j ] ) {
184
+ arr [ k ] = L [ i ] ;
185
+ i ++ ;
186
+ } else {
187
+ arr [ k ] = R [ j ] ;
188
+ j ++ ;
189
+ }
190
+ k ++ ;
191
+ }
192
+
193
+ // Copy the remaining elements of
194
+ // L[], if there are any
195
+ while ( i < n1 ) {
196
+ arr [ k ] = L [ i ] ;
197
+ i ++ ;
198
+ k ++ ;
199
+ }
200
+
201
+ // Copy the remaining elements of
202
+ // R[], if there are any
203
+ while ( j < n2 ) {
204
+ arr [ k ] = R [ j ] ;
205
+ j ++ ;
206
+ k ++ ;
207
+ }
208
+ }
209
+
210
+ // l is for left index and r is
211
+ // right index of the sub-array
212
+ // of arr to be sorted */
213
+ function mergeSort ( arr , l , r ) {
214
+ if ( l >= r ) {
215
+ return ; //returns recursively
216
+ }
217
+ var m = l + parseInt ( ( r - l ) / 2 ) ;
218
+ mergeSort ( arr , l , m ) ;
219
+ mergeSort ( arr , m + 1 , r ) ;
220
+ merge ( arr , l , m , r ) ;
221
+ }
222
+ mergeSort ( data , 0 , data . length - 1 ) ;
223
+ swapBar ( data ) ;
224
+ isSorting = false ;
225
+ isSorted = true ;
226
+ togglePlay ( ) ;
227
+ }
228
+ // calling sort function here
229
+ sort ( this ) ;
230
+ } ,
231
+
153
232
// If user wants to stop the sorting process then this function will be called and sorting algorithm will be stopped immediately.
154
233
sortStop ( ) {
155
234
this . abort = true ;
@@ -168,6 +247,9 @@ function startSorting() {
168
247
} else if ( getAlgo ( ) == "selection-sort" ) {
169
248
const selectionSortStarted = SortAlgo . selectionSort . bind ( SortAlgo ) ;
170
249
selectionSortStarted ( ) ;
250
+ } else if ( getAlgo ( ) == "merge-sort" ) {
251
+ const mergeSortStarted = SortAlgo . mergeSort . bind ( SortAlgo ) ;
252
+ mergeSortStarted ( ) ;
171
253
}
172
254
}
173
255
0 commit comments