1
1
class Solution {
2
2
public:
3
3
vector<int > sortArray (vector<int >& nums) {
4
- return srt (nums, 0 , (int )nums.size () - 1 );
4
+ vector<int > temp (nums.size ());
5
+ srt (nums, temp, 0 , nums.size () - 1 );
6
+ return nums;
5
7
}
6
8
7
- vector<int > srt (vector<int >& v, int s, int e) {
8
- if (s == e) return {v[s]};
9
- int mid = (s + e) / 2 ;
10
- vector<int > left = srt (v, s, mid);
11
- vector<int > right = srt (v, mid + 1 , e);
12
- vector<int > temp;
13
- int i = 0 , j = 0 ;
14
- while (i < (int )left.size () && j < (int )right.size ()) {
15
- if (left[i] <= right[j]) {
16
- temp.push_back (left[i++]);
9
+ private:
10
+ void srt (vector<int >& v, vector<int >& temp, int s, int e) {
11
+ if (s >= e) return ;
12
+ int mid = s + (e - s) / 2 ;
13
+ srt (v, temp, s, mid);
14
+ srt (v, temp, mid + 1 , e);
15
+ merge (v, temp, s, mid, e);
16
+ }
17
+
18
+ void merge (vector<int >& v, vector<int >& temp, int s, int mid, int e) {
19
+ int i = s, j = mid + 1 , k = s;
20
+ while (i <= mid && j <= e) {
21
+ if (v[i] <= v[j]) {
22
+ temp[k++] = v[i++];
17
23
} else {
18
- temp. push_back (right[ j++]) ;
24
+ temp[k++] = v[ j++];
19
25
}
20
26
}
21
- while (i < (int )left.size ()) {
22
- temp.push_back (left[i++]);
27
+ while (i <= mid) {
28
+ temp[k++] = v[i++];
29
+ }
30
+ while (j <= e) {
31
+ temp[k++] = v[j++];
23
32
}
24
- while (j < ( int )right. size () ) {
25
- temp. push_back (right[j++]) ;
33
+ for ( int l = s; l <= e; ++l ) {
34
+ v[l] = temp[l] ;
26
35
}
27
- return temp;
28
36
}
29
- };
37
+ };
0 commit comments