归并排序(Merge sort)

归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并

算法原理

从归并排序的定义来看,其主要是归并操作,而归并操作的前提是两个已经排序的序列,所以首先需要将一个序列划分一个个有序的的序列,然后再进行归并。 它的核心思想是:先分后归(先拆分为一个个有序的子序列,再将一个个有序子序列进行归并操作最后合并为一个有序的序列)

​ 第一次分解:将主序列分解成2个序列      [1,10,35,61] [89,36,55]

      第二次分解:将2个序列分解成4个序列    [1,10] [ 35,61] [89,36] [55]

      第三次分解:将4个序列分解成7个序列   [1] [10] [35] [61] [89] [36] [55]

      第四次合并:将7个序列合成成4个序列,合并时排序 [1,10] [35,61] [36, 89 ] [55]

      第五趟排序:将4个序列合成成2个序列,合并时排序序    [1,10, 35,61] [36, 55,89 ]

      第六趟排序:将2个序列合成成1个序列,合并时排序   [1,10,35,36,55,61,89]

      第一趟总共进行了六次比较,排序结果: [1,10,35,36,55,61,89]

def merge_sort(lists):
    if len(lists) <= 1:
        return lists
    num = int( len(lists) / 2 )
    left = MergeSort(lists[:num])
    right = MergeSort(lists[num:])
    return Merge(left, right)
def merge(left,right):
    r, l=0, 0
    result=[]
    while l<len(left) and r<len(right):
        if left[l] <= right[r]:
            result.append(left[l])
            l += 1
        else:
            result.append(right[r])
            r += 1
    result += list(left[l:])
    result += list(right[r:])
    return result
powered by Bornforthi.comFile Modify: 2021-09-17 15:06:07

results matching ""

    No results matching ""