35
35
*/
36
36
37
37
function merge ( list1 , list2 ) {
38
- var results = [ ]
38
+ const results = [ ]
39
+ let i = 0
40
+ let j = 0
39
41
40
- while ( list1 . length && list2 . length ) {
41
- if ( list1 [ 0 ] <= list2 [ 0 ] ) {
42
- results . push ( list1 . shift ( ) )
42
+ while ( i < list1 . length && j < list2 . length ) {
43
+ if ( list1 [ i ] < list2 [ j ] ) {
44
+ results . push ( list1 [ i ++ ] )
43
45
} else {
44
- results . push ( list2 . shift ( ) )
46
+ results . push ( list2 [ j ++ ] )
45
47
}
46
48
}
47
- return results . concat ( list1 , list2 )
49
+
50
+ return results . concat ( list1 . slice ( i ) , list2 . slice ( j ) )
48
51
}
49
52
50
53
/**
@@ -55,15 +58,15 @@ function merge (list1, list2) {
55
58
function mergeSort ( list ) {
56
59
if ( list . length < 2 ) return list
57
60
58
- var listHalf = Math . floor ( list . length / 2 )
59
- var subList1 = list . slice ( 0 , listHalf )
60
- var subList2 = list . slice ( listHalf , list . length )
61
+ const listHalf = Math . floor ( list . length / 2 )
62
+ const subList1 = list . slice ( 0 , listHalf )
63
+ const subList2 = list . slice ( listHalf , list . length )
61
64
62
65
return merge ( mergeSort ( subList1 ) , mergeSort ( subList2 ) )
63
66
}
64
67
65
68
// Merge Sort Example
66
- var unsortedArray = [ 10 , 5 , 3 , 8 , 2 , 6 , 4 , 7 , 9 , 1 ]
67
- var sortedArray = mergeSort ( unsortedArray )
69
+ const unsortedArray = [ 10 , 5 , 3 , 8 , 2 , 6 , 4 , 7 , 9 , 1 ]
70
+ const sortedArray = mergeSort ( unsortedArray )
68
71
69
72
console . log ( 'Before:' , unsortedArray , 'After:' , sortedArray )
0 commit comments