# 912. Sort an Array
題目:<https://leetcode.com/problems/sort-an-array/>
解法:實作 merge sort
Python3:
``` python 3
class Solution:
def sortArray(self, nums: list[int]) -> list[int]:
if len(nums) <= 1:
return nums
pivot = len(nums) // 2
leftNums = self.sortArray(nums[:pivot])
rightNums = self.sortArray(nums[pivot:])
output = []
leftIdx = rightIdx = 0
leftLen = len(leftNums)
rightLen = len(rightNums)
while leftIdx < leftLen and rightIdx < rightLen:
if leftNums[leftIdx] < rightNums[rightIdx]:
output.append(leftNums[leftIdx])
leftIdx += 1
else:
output.append(rightNums[rightIdx])
rightIdx += 1
output += leftNums[leftIdx:]
output += rightNums[rightIdx:]
return output
if __name__ == '__main__':
nums = [5,1,1,2,0,0]
ans = Solution().sortArray(nums)
print(ans)
```
C:
``` c
#include <stdio.h>
#include <stdlib.h>
int* sortArray(int* nums, int numsSize, int* returnSize) {
*returnSize = numsSize;
int *output = (int*)malloc(sizeof(int) * numsSize);
if (numsSize <= 1) {
for (int i = 0; i < numsSize; i++)
output[i] = nums[i];
return output;
}
int pivot = numsSize / 2, leftLen, rightLen, leftIdx, rightIdx, outputIdx;
int *leftNums = sortArray(nums, pivot, &leftLen);
int *rightNums = sortArray(nums + pivot, numsSize - pivot, &rightLen);
outputIdx = leftIdx = rightIdx = 0;
while (leftIdx < leftLen && rightIdx < rightLen) {
if (leftNums[leftIdx] < rightNums[rightIdx])
output[outputIdx++] = leftNums[leftIdx++];
else
output[outputIdx++] = rightNums[rightIdx++];
}
while (leftIdx < leftLen)
output[outputIdx++] = leftNums[leftIdx++];
while (rightIdx < rightLen)
output[outputIdx++] = rightNums[rightIdx++];
return output;
}
int main()
{
int nums[] = {5,1,1,2,0,0};
int numsSize = sizeof(nums) / sizeof(nums[0]);
int returnSize;
int* ans = sortArray(nums, numsSize, &returnSize);
printf("%d\n", returnSize);
for (int i = 0; i < returnSize; i++)
printf("%d ", ans[i]);
printf("\n");
return 0;
}
```
###### tags: `leetcode` `array` `sort` `divide and conquer`