File tree 1 file changed +54
-0
lines changed
1 file changed +54
-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
+ var sortArray = function ( nums ) {
9
+
10
+ const merge = ( left , mid , right ) => {
11
+ const arr1 = nums . slice ( left , mid + 1 ) ;
12
+ const arr2 = nums . slice ( mid + 1 , right + 1 ) ;
13
+
14
+ let p1 = 0 ;
15
+ let p2 = 0 ;
16
+ let gp = left ;
17
+
18
+ while ( p1 < arr1 . length && p2 < arr2 . length ) {
19
+ if ( arr1 [ p1 ] < arr2 [ p2 ] ) {
20
+ nums [ gp ] = arr1 [ p1 ] ;
21
+ p1 ++ ;
22
+ } else {
23
+ nums [ gp ] = arr2 [ p2 ] ;
24
+ p2 ++ ;
25
+ }
26
+ gp ++ ;
27
+ }
28
+
29
+ while ( p1 < arr1 . length ) {
30
+ nums [ gp ] = arr1 [ p1 ] ;
31
+ p1 ++ ;
32
+ gp ++ ;
33
+ }
34
+
35
+ while ( p2 < arr2 . length ) {
36
+ nums [ gp ] = arr2 [ p2 ] ;
37
+ p2 ++ ;
38
+ gp ++ ;
39
+ }
40
+ return nums ;
41
+ }
42
+
43
+ const mergeSort = ( left , right ) => {
44
+
45
+ if ( left === right ) return nums ;
46
+
47
+ const mid = Math . floor ( ( left + right ) / 2 ) ;
48
+ mergeSort ( left , mid ) ;
49
+ mergeSort ( mid + 1 , right ) ;
50
+ return merge ( left , mid , right ) ;
51
+ }
52
+
53
+ return mergeSort ( 0 , nums . length - 1 ) ;
54
+ } ;
You can’t perform that action at this time.
0 commit comments