欢迎光临散文网 会员登陆 & 注册

【算法图解】学习笔记5——归并排序

2022-01-06 09:26 作者:达达里A  | 我要投稿

简介:

归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为n*log n

1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。

采用分治法:

  • 分割:递归地把当前序列平均分割成两半。

  • 集成:在保持元素顺序的同时将上一步得到的子序列集成到一起(归并)。

代码实现

def merge(left,right):#合并两个列表

    merge_arr=[]

    i=0

    j=0

    l=len(left)

    r=len(right)

#i分别作为left和right的下标,分别获取左右子列表的长度

    while i<l and j<r:#循环归并左右子列表元素

        if left[i]<right[j]:

            merge_arr.append(left[i])

            i+=1

        else:

            merge_arr.append(right[j])

            j+=1

    merge_arr.extend(left[i:])

    merge_arr.extend(right[j:])

    #归并左子列表剩余元素

    #归并右子列表剩余元素

    #返回归并好的列表

    # print('左数组为:{}'.format(left),'右数组为{}'.format(right),'合并数组为{}'.format(merge_arr))

    return merge_arr

def RealSortQuick(input_arr):#拆分+合并

    if len(input_arr)<=1:

        return input_arr

    else:

        mid=int(len(input_arr)/2)

        left=RealSortQuick(input_arr[0:mid])

        right=RealSortQuick(input_arr[mid:])

        #合并排好序的左右两个子列表

        return merge(left,right)


myarr=[24,34,2,3,567,34,65,78,863,421,23]

RealSortQuick(myarr)

       

   


【算法图解】学习笔记5——归并排序的评论 (共 条)

分享到微博请遵守国家法律