归并排序的思想就是先递归拆分当前的数组,然后再进行排序
递归的算法实现如下:
def merge(nums_l,nums_r):
l,r = 0,0
new_nums = list()
while(l<len(nums_l) and r<len(nums_r)):
if nums_l[l] <= nums_r[r]:
new_nums.append(nums_l[l])
l = l+1
else:
new_nums.append(nums_r[r])
r = r+1
new_nums = new_nums + nums_l[l:]
new_nums = new_nums + nums_r[r:]
return new_nums
def mergeSort(nums):
if len(nums) < 2:
return nums
middle = int(len(nums)/2)
nums_l = mergeSort(nums[:middle])
nums_r = mergeSort(nums[middle:])
return merge(nums_l,nums_r)
print(mergeSort([1,2,3,4,8,5,2,1]))
归并算法很容易理解,核心思想就是拆分合并,递归算法实现起来比较简洁,但是一般的面试官不想让你这么轻松,就一定要让你改成非递归实现,也就是递归改循环,整体的思想就是用栈去替代原本递归的部分即可。
以下是非递归的实现: