Q9 Merge Sort
Given an array of integers, sort the elements in the array in ascending order. The merge sort algorithm should be used to solve this problem.
Examples
{1} is sorted to {1}
{1, 2, 3} is sorted to {1, 2, 3}
{3, 2, 1} is sorted to {1, 2, 3}
{4, 2, -3, 6, 1} is sorted to {-3, 1, 2, 4, 6}
Note:
list operation:
array=[1,2]
- array.append([1,3])
->[1,2, [1,3]] - array.extend([1,3])
->[1,2,1,3]
append和extend都是在原list上修改,优先使用 - c=array+[1,3]
->[1,2,1,3]
list+list是重新赋值,占空间更大
Divide left and right
Merge and Combine with helper
Merge helper is pure merge
class Solution(object):
def mergeSort(self, array):
"""
input: int[] array
return: int[]
"""
# write your solution here
#basecase
if not array or len(array) == 1:
return array
mid=len(array)//2
#divide
left=self.mergeSort(array[:mid])
right=self.mergeSort(array[mid:])
#merge and combine
array=self.merge(left,right)
return array
def merge(self,left,right):
array=[]
i,j=0,0
while i<len(left) and j <len(right):
if left[i]<right[j]:
array.append(left[i])
i+=1
else:
array.append(right[j])
j+=1
if i<len(left):
array.extend(left[i:])
if j<len(right):
array.extend(right[j:])
return array
#Time O(nlogn)
#Space O(n)