一、归并排序
什么是归并?
归并排序的原理是什么?
能不能用python代码敲出一个实例?
同样的,这篇文章的目的也是要为大家揭开这几个疑惑。
归并排序:从字面意思上来看,主要是归和并,也就是先归类,分开,然后再合并起来。采用"分治法"的思想,分而治之,一半一半的拆分去排序
我们通过例子来一步步看懂它的原理。比如:有一个列表【8,4,5,7,3,1,6,2】,请用归并排序的方法将其升序排列
①先把他们一半一半的拆开:{8,4,5,7}、{3,1,6,2}
②再接着拆 {8,4}、{5,7}、 {3,1}、{6,2}
③在已拆分的子序列里面,比较大小:第一小组,4比8小,4排左边,8排右边;同理其他组别也是一样的道理,小的往左排,大的往右排
{4,8}、{5,7} {1、3}、{2,6}
④再合并: {4,5,7,8} {1,2,3,6}
⑤最后合并: {1,2,3,4,5,6,7,8}
其原理的实质就是先分开,后合并;分开之后再比大小,最后又合并,放到一个大的序列里面
看下面的python代码实现:
def merge_Sort(arr): import math if (len(arr) < 2): return arr # 从中间开始一分为二 middle = math.floor(len(arr) / 2) left, right = arr[0:middle], arr[middle:] return merge(merge_Sort(left), merge_Sort(right)) # 在小的序列里面的左右两个数进行大小比较 def merge(left, right): result = [] while left and right: if left[0] <= right[0]: result.append(left.pop(0)) else: result.append(right.pop(0)); while left: result.append(left.pop(0)) while right: result.append(right.pop(0)); return result li4 = [8, 4, 5, 7, 3, 1, 6, 2] print(merge_Sort(li4))
同样的,再举出一个例子: