3535*/
3636
3737function merge ( list1 , list2 ) {
38- var results = [ ]
38+ const results = [ ]
39+ let i = 0
40+ let j = 0
3941
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 ++ ] )
4345 } else {
44- results . push ( list2 . shift ( ) )
46+ results . push ( list2 [ j ++ ] )
4547 }
4648 }
47- return results . concat ( list1 , list2 )
49+
50+ return results . concat ( list1 . slice ( i ) , list2 . slice ( j ) )
4851}
4952
5053/**
@@ -55,15 +58,15 @@ function merge (list1, list2) {
5558function mergeSort ( list ) {
5659 if ( list . length < 2 ) return list
5760
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 )
6164
6265 return merge ( mergeSort ( subList1 ) , mergeSort ( subList2 ) )
6366}
6467
6568// 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 )
6871
6972console . log ( 'Before:' , unsortedArray , 'After:' , sortedArray )
0 commit comments