python 实现归并排序

慕课网 归并排序学习

1.排序思想

  分而治之

2.方法

  递归实现

  递归终止条件: 2个数,然后排序

       合并两边有序数列的方法 

        c++

  

3.时间复杂度

  由于递归拆分的时间复杂度是logN 然而,进行两个有序数组排序的方法复杂度是N该算法的时间复杂度是N*logN 所以是NlogN。

       

  

 

python 实现方法

#!/usr/bin/python


def sort_merge(arr):
    if len(arr) <=1:
        return arr
    len_ = len(arr)
    mid = len_ / 2
    left = sort_merge(arr[:mid])
    right = sort_merge(arr[mid:])
    return merge(left, right)


def merge(left, right):
    arr = []
    i = j = 0   # i is left's index, j is right's index
    while i < len(left) or j < len(right):
        if i == len(left):
            arr.append(right[j])
            j +=1
        elif j== len(right):
            arr.append(left[i])
            i +=1
        elif left[i] < right[j]:
            arr.append(left[i])
            i += 1
        else:
            arr.append(right[j])
            j += 1
    return arr

if __name__ == '__main__':
    a = [2,3,4,5,45,63,-1,-3.-5,99,200]
    print sort_merge(a)

  

posted @ 2018-04-11 21:40  瓦肯船长  阅读(147)  评论(0)    收藏  举报