912.Sort an Array
===
###### tags: `Medium`,`Array`,`Sorting`
[912. Sort an Array](https://leetcode.com/problems/sort-an-array/)
### 題目描述
Given an array of integers `nums`, sort the array in ascending order and return it.
You must solve the problem **without using any built-in** functions in `O(nlog(n))` time complexity and with the smallest space complexity possible.
### 範例
**Example 1:**
```
Input: nums = [5,2,3,1]
Output: [1,2,3,5]
Explanation: After sorting the array, the positions of some numbers are not changed (for example, 2 and 3), while the positions of other numbers are changed (for example, 1 and 5).
```
**Example 2:**
```
Input: nums = [5,1,1,2,0,0]
Output: [0,0,1,1,2,5]
Explanation: Note that the values of nums are not necessairly unique.
```
**Constraints**:
* 1 <= `nums.length` <= 5 * 10^4^
* -5 * 10^4^ <= `nums[i]` <= 5 * 10^4^
### 解答
#### Javascript
```javascript=
function sortArray(nums) {
if (nums.length <= 1) return nums;
const mid = ~~(nums.length / 2);
const left = nums.slice(0, mid);
const right = nums.slice(mid);
return merge(sortArray(left), sortArray(right));
}
function merge(left, right) {
const result = [];
let leftIndex = 0;
let rightIndex = 0;
while (leftIndex < left.length && rightIndex < right.length) {
if (left[leftIndex] < right[rightIndex]) {
result.push(left[leftIndex]);
leftIndex++;
} else {
result.push(right[rightIndex]);
rightIndex++;
}
}
result.push(...left.slice(leftIndex));
result.push(...right.slice(rightIndex));
return result;
}
```
> 寫個merge sort好了比較簡單。
> [name=Marsgoat][time=Mar 1, 2023]
#### Python
```python=
class Solution:
def sortArray(self, nums: List[int]) -> List[int]:
def quickSort(left, right):
if left >= right:
return
l, r = left, right
mid = (r - l) // 2 + l
pivot = nums[mid]
while r >= l:
while r >= l and nums[l] < pivot: l += 1
while r >= l and nums[r] > pivot: r -= 1
if r >= l:
nums[l], nums[r] = nums[r], nums[l]
l += 1
r -= 1
quickSort(left, r)
quickSort(l, right)
quickSort(0, len(nums) - 1)
return nums
```
> [name=Ron Chen][time=Thu, Mar 2, 2023]
### Reference
[回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)