@@ -89,31 +89,29 @@ class Solution:
89
89
``` python
90
90
class Solution :
91
91
def sortArray (self , nums : List[int ]) -> List[int ]:
92
- def merge_sort (nums , left , right ):
93
- if left >= right :
92
+ def merge_sort (l , r ):
93
+ if l >= r :
94
94
return
95
- mid = (left + right ) >> 1
96
- merge_sort(nums, left , mid)
97
- merge_sort(nums, mid + 1 , right )
98
- i, j = left , mid + 1
95
+ mid = (l + r ) >> 1
96
+ merge_sort(l , mid)
97
+ merge_sort(mid + 1 , r )
98
+ i, j = l , mid + 1
99
99
tmp = []
100
- while i <= mid and j <= right :
100
+ while i <= mid and j <= r :
101
101
if nums[i] <= nums[j]:
102
102
tmp.append(nums[i])
103
103
i += 1
104
104
else :
105
105
tmp.append(nums[j])
106
106
j += 1
107
- while i <= mid:
108
- tmp.append(nums[i])
109
- i += 1
110
- while j <= right:
111
- tmp.append(nums[j])
112
- j += 1
113
- for i in range (left, right + 1 ):
114
- nums[i] = tmp[i - left]
115
-
116
- merge_sort(nums, 0 , len (nums) - 1 )
107
+ if i <= mid:
108
+ tmp.extend(nums[i:mid + 1 ])
109
+ if j <= r:
110
+ tmp.extend(nums[j: r + 1 ])
111
+ for i in range (l, r + 1 ):
112
+ nums[i] = tmp[i - l]
113
+
114
+ merge_sort(0 , len (nums) - 1 )
117
115
return nums
118
116
```
119
117
@@ -197,21 +195,24 @@ class Solution {
197
195
198
196
``` java
199
197
class Solution {
198
+ private int [] nums;
199
+
200
200
public int [] sortArray (int [] nums ) {
201
- mergeSort(nums, 0 , nums. length - 1 );
201
+ this . nums = nums;
202
+ mergeSort(0 , nums. length - 1 );
202
203
return nums;
203
204
}
204
205
205
- private void mergeSort (int [] nums , int left , int right ) {
206
- if (left >= right ) {
206
+ private void mergeSort (int l , int r ) {
207
+ if (l >= r ) {
207
208
return ;
208
209
}
209
- int mid = (left + right ) >> 1 ;
210
- mergeSort(nums, left , mid);
211
- mergeSort(nums, mid + 1 , right );
212
- int i = left , j = mid + 1 , k = 0 ;
213
- int [] tmp = new int [right - left + 1 ];
214
- while (i <= mid && j <= right ) {
210
+ int mid = (l + r ) >> 1 ;
211
+ mergeSort(l , mid);
212
+ mergeSort(mid + 1 , r );
213
+ int i = l , j = mid + 1 , k = 0 ;
214
+ int [] tmp = new int [r - l + 1 ];
215
+ while (i <= mid && j <= r ) {
215
216
if (nums[i] <= nums[j]) {
216
217
tmp[k++ ] = nums[i++ ];
217
218
} else {
@@ -221,11 +222,11 @@ class Solution {
221
222
while (i <= mid) {
222
223
tmp[k++ ] = nums[i++ ];
223
224
}
224
- while (j <= right ) {
225
+ while (j <= r ) {
225
226
tmp[k++ ] = nums[j++ ];
226
227
}
227
- for (i = left ; i <= right ; ++ i) {
228
- nums[i] = tmp[i - left ];
228
+ for (i = l ; i <= r ; ++ i) {
229
+ nums[i] = tmp[i - l ];
229
230
}
230
231
}
231
232
}
@@ -269,26 +270,35 @@ public:
269
270
class Solution {
270
271
public:
271
272
vector<int> sortArray(vector<int>& nums) {
272
- merge_sort(nums, 0, nums.size() - 1);
273
+ function<void(int, int)> merge_sort = [&](int l, int r) {
274
+ if (l >= r) {
275
+ return;
276
+ }
277
+ int mid = (l + r) >> 1;
278
+ merge_sort(l, mid);
279
+ merge_sort(mid + 1, r);
280
+ int i = l, j = mid + 1, k = 0;
281
+ int tmp[r - l + 1];
282
+ while (i <= mid && j <= r) {
283
+ if (nums[i] <= nums[j]) {
284
+ tmp[k++] = nums[i++];
285
+ } else {
286
+ tmp[k++] = nums[j++];
287
+ }
288
+ }
289
+ while (i <= mid) {
290
+ tmp[k++] = nums[i++];
291
+ }
292
+ while (j <= r) {
293
+ tmp[k++] = nums[j++];
294
+ }
295
+ for (i = l; i <= r; ++i) {
296
+ nums[i] = tmp[i - l];
297
+ }
298
+ };
299
+ merge_sort(0, nums.size() - 1);
273
300
return nums;
274
301
}
275
-
276
- void merge_sort(vector<int>& nums, int left, int right) {
277
- if (left >= right) return;
278
- int mid = left + right >> 1;
279
- merge_sort(nums, left, mid);
280
- merge_sort(nums, mid + 1, right);
281
- int i = left, j = mid + 1, k = 0;
282
- vector<int> tmp(right - left + 1);
283
- while (i <= mid && j <= right)
284
- {
285
- if (nums[i] <= nums[j]) tmp[k++] = nums[i++];
286
- else tmp[k++] = nums[j++];
287
- }
288
- while (i <= mid) tmp[k++] = nums[i++];
289
- while (j <= right) tmp[k++] = nums[j++];
290
- for (i = left; i <= right; ++i) nums[i] = tmp[i - left];
291
- }
292
302
};
293
303
```
294
304
@@ -302,12 +312,12 @@ func sortArray(nums []int) []int {
302
312
return nums
303
313
}
304
314
305
- func quickSort (nums []int , left , right int ) {
306
- if left >= right {
315
+ func quickSort (nums []int , l , r int ) {
316
+ if l >= r {
307
317
return
308
318
}
309
- i , j := left -1 , right +1
310
- x := nums[(left+right )>>1 ]
319
+ i , j := l -1 , r +1
320
+ x := nums[(l+r )>>1 ]
311
321
for i < j {
312
322
for {
313
323
i++
@@ -325,8 +335,8 @@ func quickSort(nums []int, left, right int) {
325
335
nums[i], nums[j] = nums[j], nums[i]
326
336
}
327
337
}
328
- quickSort (nums, left , j)
329
- quickSort (nums, j+1 , right )
338
+ quickSort (nums, l , j)
339
+ quickSort (nums, j+1 , r )
330
340
}
331
341
```
332
342
@@ -338,16 +348,16 @@ func sortArray(nums []int) []int {
338
348
return nums
339
349
}
340
350
341
- func mergeSort (nums []int , left , right int ) {
342
- if left >= right {
351
+ func mergeSort (nums []int , l , r int ) {
352
+ if l >= r {
343
353
return
344
354
}
345
- mid := (left + right ) >> 1
346
- mergeSort (nums, left , mid)
347
- mergeSort (nums, mid+1 , right )
348
- i , j , k := left , mid+1 , 0
349
- tmp := make ([]int , right-left +1 )
350
- for i <= mid && j <= right {
355
+ mid := (l + r ) >> 1
356
+ mergeSort (nums, l , mid)
357
+ mergeSort (nums, mid+1 , r )
358
+ i , j , k := l , mid+1 , 0
359
+ tmp := make ([]int , r-l +1 )
360
+ for i <= mid && j <= r {
351
361
if nums[i] <= nums[j] {
352
362
tmp[k] = nums[i]
353
363
i++
@@ -357,22 +367,85 @@ func mergeSort(nums []int, left, right int) {
357
367
}
358
368
k++
359
369
}
360
- for i <= mid {
370
+ for ; i <= mid; i++ {
361
371
tmp[k] = nums[i]
362
- i++
363
372
k++
364
373
}
365
- for j <= right {
374
+ for ; j <= r; j++ {
366
375
tmp[k] = nums[j]
367
- j++
368
376
k++
369
377
}
370
- for i = left ; i <= right ; i++ {
371
- nums[i] = tmp[i-left ]
378
+ for i = l ; i <= r ; i++ {
379
+ nums[i] = tmp[i-l ]
372
380
}
373
381
}
374
382
```
375
383
384
+ ### ** TypeScript**
385
+
386
+ 快速排序:
387
+
388
+ ``` ts
389
+ function sortArray(nums : number []): number [] {
390
+ function quickSort(l : number , r : number ) {
391
+ if (l >= r ) {
392
+ return ;
393
+ }
394
+ let i = l - 1 ;
395
+ let j = r + 1 ;
396
+ const x = nums [(l + r ) >> 1 ];
397
+ while (i < j ) {
398
+ while (nums [++ i ] < x );
399
+ while (nums [-- j ] > x );
400
+ if (i < j ) {
401
+ [nums [i ], nums [j ]] = [nums [j ], nums [i ]];
402
+ }
403
+ }
404
+ quickSort (l , j );
405
+ quickSort (j + 1 , r );
406
+ }
407
+ const n = nums .length ;
408
+ quickSort (0 , n - 1 );
409
+ return nums ;
410
+ }
411
+ ```
412
+
413
+ 归并排序:
414
+
415
+ ``` ts
416
+ function sortArray(nums : number []): number [] {
417
+ function mergetSort(l : number , r : number ) {
418
+ if (l >= r ) {
419
+ return ;
420
+ }
421
+ const mid = (l + r ) >> 1 ;
422
+ mergetSort (l , mid );
423
+ mergetSort (mid + 1 , r );
424
+ let [i, j, k] = [l , mid + 1 , 0 ];
425
+ while (i <= mid && j <= r ) {
426
+ if (nums [i ] <= nums [j ]) {
427
+ tmp [k ++ ] = nums [i ++ ];
428
+ } else {
429
+ tmp [k ++ ] = nums [j ++ ];
430
+ }
431
+ }
432
+ while (i <= mid ) {
433
+ tmp [k ++ ] = nums [i ++ ];
434
+ }
435
+ while (j <= r ) {
436
+ tmp [k ++ ] = nums [j ++ ];
437
+ }
438
+ for (i = l , j = 0 ; i <= r ; ++ i , ++ j ) {
439
+ nums [i ] = tmp [j ];
440
+ }
441
+ }
442
+ const n = nums .length ;
443
+ let tmp = new Array (n ).fill (0 );
444
+ mergetSort (0 , n - 1 );
445
+ return nums ;
446
+ }
447
+ ```
448
+
376
449
### ** JavaScript**
377
450
378
451
快速排序:
@@ -383,22 +456,22 @@ func mergeSort(nums []int, left, right int) {
383
456
* @return {number[]}
384
457
*/
385
458
var sortArray = function (nums ) {
386
- function quickSort (left , right ) {
387
- if (left >= right ) {
459
+ function quickSort (l , r ) {
460
+ if (l >= r ) {
388
461
return ;
389
462
}
390
- let i = left - 1 ;
391
- let j = right + 1 ;
392
- const x = nums[(left + right ) >> 1 ];
463
+ let i = l - 1 ;
464
+ let j = r + 1 ;
465
+ const x = nums[(l + r ) >> 1 ];
393
466
while (i < j) {
394
467
while (nums[++ i] < x);
395
468
while (nums[-- j] > x);
396
469
if (i < j) {
397
470
[nums[i], nums[j]] = [nums[j], nums[i]];
398
471
}
399
472
}
400
- quickSort (left , j);
401
- quickSort (j + 1 , right );
473
+ quickSort (l , j);
474
+ quickSort (j + 1 , r );
402
475
}
403
476
const n = nums .length ;
404
477
quickSort (0 , n - 1 );
@@ -414,15 +487,15 @@ var sortArray = function (nums) {
414
487
* @return {number[]}
415
488
*/
416
489
var sortArray = function (nums ) {
417
- function mergetSort (left , right ) {
418
- if (left >= right ) {
490
+ function mergetSort (l , r ) {
491
+ if (l >= r ) {
419
492
return ;
420
493
}
421
- const mid = (left + right ) >> 1 ;
422
- mergetSort (left , mid);
423
- mergetSort (mid + 1 , right );
424
- let [i, j, k] = [left , mid + 1 , 0 ];
425
- while (i <= mid && j <= right ) {
494
+ const mid = (l + r ) >> 1 ;
495
+ mergetSort (l , mid);
496
+ mergetSort (mid + 1 , r );
497
+ let [i, j, k] = [l , mid + 1 , 0 ];
498
+ while (i <= mid && j <= r ) {
426
499
if (nums[i] <= nums[j]) {
427
500
tmp[k++ ] = nums[i++ ];
428
501
} else {
@@ -432,10 +505,10 @@ var sortArray = function (nums) {
432
505
while (i <= mid) {
433
506
tmp[k++ ] = nums[i++ ];
434
507
}
435
- while (j <= right ) {
508
+ while (j <= r ) {
436
509
tmp[k++ ] = nums[j++ ];
437
510
}
438
- for (i = left , j = 0 ; i <= right ; ++ i, ++ j) {
511
+ for (i = l , j = 0 ; i <= r ; ++ i, ++ j) {
439
512
nums[i] = tmp[j];
440
513
}
441
514
}
0 commit comments