File tree Expand file tree Collapse file tree 1 file changed +53
-0
lines changed
Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * https://leetcode.com/problems/sort-an-array/
3+ * Merge Sort
4+ * Time O(n*log(n)) | Space O(n)
5+ * @param {number[] } nums
6+ * @return {number[] }
7+ */
8+ const sortArray = function ( nums ) {
9+ return mergeSort ( 0 , nums . length - 1 , nums ) ;
10+ } ;
11+
12+ const mergeSort = ( left , right , nums ) => {
13+
14+ if ( left === right ) return nums ;
15+
16+ const mid = Math . floor ( ( left + right ) / 2 ) ;
17+ mergeSort ( left , mid , nums ) ;
18+ mergeSort ( mid + 1 , right , nums ) ;
19+ return merge ( left , right , mid , nums ) ;
20+ }
21+
22+ const merge = ( left , right , mid , nums ) => {
23+ const arr1 = nums . slice ( left , mid + 1 ) ;
24+ const arr2 = nums . slice ( mid + 1 , right + 1 ) ;
25+
26+ let p1 = 0 ;
27+ let p2 = 0 ;
28+ let gp = left ;
29+
30+ while ( p1 < arr1 . length && p2 < arr2 . length ) {
31+ if ( arr1 [ p1 ] < arr2 [ p2 ] ) {
32+ nums [ gp ] = arr1 [ p1 ] ;
33+ p1 ++ ;
34+ } else {
35+ nums [ gp ] = arr2 [ p2 ] ;
36+ p2 ++ ;
37+ }
38+ gp ++ ;
39+ }
40+
41+ while ( p1 < arr1 . length ) {
42+ nums [ gp ] = arr1 [ p1 ] ;
43+ p1 ++ ;
44+ gp ++ ;
45+ }
46+
47+ while ( p2 < arr2 . length ) {
48+ nums [ gp ] = arr2 [ p2 ] ;
49+ p2 ++ ;
50+ gp ++ ;
51+ }
52+ return nums ;
53+ }
You can’t perform that action at this time.
0 commit comments