@@ -218,30 +218,25 @@ export function quickSort(array, lo, hi) {
218
218
export function mergeSort ( array ) {
219
219
const arr = array . slice ( ) ;
220
220
checkArray ( arr ) ;
221
- if ( arr . length < 2 ) {
222
- return arr ;
223
- }
224
- const merge = ( a , b ) => {
221
+ if ( arr . length < 2 ) return arr ;
222
+
223
+ const merge = ( left , right ) => {
225
224
const result = [ ] ;
226
- const lenA = a . length ;
227
- const lenB = b . length ;
228
225
let i = 0 ;
229
226
let j = 0 ;
230
- while ( i < lenA && j < lenB ) {
231
- if ( a [ i ] === b [ j ] ) {
232
- result . push ( a [ i ] , b [ j ] ) ;
227
+ while ( i < left . length && j < right . length ) {
228
+ if ( left [ i ] <= right [ j ] ) {
229
+ result . push ( left [ i ] ) ;
233
230
i += 1 ;
231
+ }
232
+ if ( left [ i ] >= right [ j ] ) {
233
+ result . push ( right [ j ] ) ;
234
234
j += 1 ;
235
- } else if ( a [ i ] > b [ j ] ) {
236
- result . push ( b [ j ] ) ;
237
- j += 1 ;
238
- } else {
239
- result . push ( a [ i ] ) ;
240
- i += 1 ;
241
235
}
242
236
}
243
- return result . concat ( a . slice ( i ) , b . slice ( j ) ) ;
237
+ return result . concat ( left . slice ( i ) , right . slice ( j ) ) ;
244
238
} ;
239
+
245
240
const mid = Math . floor ( arr . length / 2 ) ;
246
241
return merge ( mergeSort ( arr . slice ( 0 , mid ) ) , mergeSort ( arr . slice ( mid ) ) ) ;
247
242
}
@@ -264,9 +259,8 @@ export function mergeSort(array) {
264
259
export function heapSort ( array ) {
265
260
const arr = array . slice ( ) ;
266
261
checkArray ( arr ) ;
267
- if ( arr . length < 2 ) {
268
- return arr ;
269
- }
262
+ if ( arr . length < 2 ) return arr ;
263
+
270
264
const heapify = ( list , index , end = list . length - 1 ) => {
271
265
const parentIndex = Math . ceil ( index / 2 ) - 1 ;
272
266
if ( index < 0 || parentIndex < 0 ) {
@@ -289,4 +283,4 @@ export function heapSort(array) {
289
283
}
290
284
291
285
return arr ;
292
- }
286
+ }
0 commit comments