@@ -5,22 +5,20 @@ const assert = require('assert');
55 * Merge two arrays in asc order
66 * @example
77 * merge([2,5,9], [1,6,7]) => [1, 2, 5, 6, 7, 9]
8- * @param {array } array1
9- * @param {array } array2
8+ * @param {array } a
9+ * @param {array } b
1010 * @returns {array } merged arrays in asc order
1111 */
12- function merge ( array1 = [ ] , array2 = [ ] ) {
12+ function merge ( a = [ ] , b = [ ] ) {
1313 const merged = [ ] ;
14- let array1Index = 0 ;
15- let array2Index = 0 ;
14+ let ai = 0 ;
15+ let bi = 0 ;
1616 // merge elements on a and b in asc order. Run-time O(a + b)
17- while ( array1Index < array1 . length || array2Index < array2 . length ) {
18- if ( array1Index >= array1 . length || array1 [ array1Index ] > array2 [ array2Index ] ) {
19- merged . push ( array2 [ array2Index ] ) ;
20- array2Index += 1 ;
17+ for ( let ai = 0 , bi = 0 ; ai < a . length || bi < b . length ; ) {
18+ if ( ai >= a . length || a [ ai ] > b [ bi ] ) {
19+ merged . push ( b [ bi ++ ] ) ;
2120 } else {
22- merged . push ( array1 [ array1Index ] ) ;
23- array1Index += 1 ;
21+ merged . push ( a [ ai ++ ] ) ;
2422 }
2523 }
2624 return merged ;
@@ -46,7 +44,7 @@ function sort(array = []) {
4644 return array [ 0 ] > array [ 1 ] ? [ array [ 1 ] , array [ 0 ] ] : array ;
4745 }
4846 // slit and merge
49- const mid = size / 2 ;
47+ const mid = parseInt ( size / 2 , 10 ) ;
5048 return merge ( sort ( array . slice ( 0 , mid ) ) , sort ( array . slice ( mid ) ) ) ;
5149}
5250// end::sort[]
@@ -59,3 +57,4 @@ assert.deepStrictEqual(sort(), []);
5957
6058assert . deepStrictEqual ( merge ( [ 2 , 5 , 9 ] , [ 1 , 6 , 7 ] ) , [ 1 , 2 , 5 , 6 , 7 , 9 ] ) ;
6159assert . deepStrictEqual ( merge ( ) , [ ] ) ;
60+ assert . deepStrictEqual ( merge ( [ 3 , 5 , 7 ] , [ 2 , 4 ] ) , [ 2 , 3 , 4 , 5 , 7 ] ) ;
0 commit comments