一.思路 另一种实现归并排序的方法是,先归并微型数组,再成对归并得到的子数组,直到将整个数组归并在一起. 我们先进行1-by-1归并,然后2-by-2归并,4-by-4归并,如此下去. 在最后一次归并中,第二个数组可能比第一个数组要小. 二.代码实现 关键代码: public static void sort(Comparable[] input) { int N = input.length; aux = new Comparable[N]; for(int sz = 1; sz < N; s
#-*- coding: UTF-8 -*- import numpy as np def Merge(a, f, m, l): i = f j = m + 1 tmp = [] while i <= m and j <= l: if a[i] <= a[j]: tmp.append(a[i]) i += 1 else: tmp.append(a[j]) j += 1 while i <= m: tmp.append(a[i]) i += 1 while j<= l: tmp
因为上个星期leetcode的一道题(Median of Two Sorted Arrays)所以想仔细了解一下归并排序的实现. 还是先阐述一下排序思路: 首先归并排序使用了二分法,归根到底的思想还是分而治之.拿到一个长数组,将其不停的分为左边和右边两份,然后以此递归分下去.然后再将她们按照两个有序数组的样子合并起来.这样说起来可能很难理解,于是给出一张我画的图. 这里显示了归并排序的第一步,将数组按照middle进行递归拆分,最后分到最细之后再将其使用对两个有序数组进行排序的方法对其进行排序.
代码: #coding:utf-8 #author:徐卜灵 def merge(left,right): i,j = 0,0 result = [] while i < len(left) and j < len(right): if left[i] <= right[j]: result.append(left[i]) i += 1 else: result.append(right[j]) j += 1 result += left[i:] result += right[j:] r