归并排序(用python实现)

本文详细介绍了归并排序和快速排序这两种常见的时间复杂度为O(nlogn)的排序算法,着重讨论了它们的分治思想、调用方式以及Python代码实现,包括`extend()`和`append()`函数的区别。
摘要由CSDN通过智能技术生成

       归并排序和快速排序时间复杂度均为O(n)=n*logn。

       但两者的区别是:快速排序是最后调用函数,而归并是一开始调用函数,将列表切割成细小片段,最后拼接起来。

       两者均采用分治思想。

代码如下:

def merge_sort(arr):#归并排序
    if len(arr)<=1: #判断arr列表是否无法再继续切割下去,若len(arr)<=1,则仅存在一个元素,返回arr
        return arr
    else:
        mid=len(arr)//2 #反之,则以mid为长度中间值,不断切割arr,并不断分为left_sort和right_sort
        left_sort=merge_sort(arr[:mid])
        right_sort=merge_sort(arr[mid:])
        
    sort_arr=[]#创建一个新列表,来存储有序的数据
    
    i=j=0
    
    while i<len(left_sort) and j < len(right_sort): #防止下标i和j越界
        if left_sort[i]<right_sort[j]: #判断当前left_sort[i]和right_sort[j]中哪个更小,放入sort_arr
            sort_arr.append(left_sort[i])
            i+=1
        else:
            sort_arr.append(right_sort[j])#和上文同理
            j+=1
    sort_arr.extend(left_sort[i:])#将left_sort剩余的数据加入sort_arr内
    sort_arr.extend(right_sort[j:])#将right_sort剩余的数据加入sort_arr内
    
    return sort_arr

n=int (input())

arr=list(map(int ,input().split())) 

arr_sort=merge_sort(arr)

print(*arr_sort)       

注释:extend()函数功能:

用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

区别于append()函数,append()函数一般在列表后面增加一个值,而extend()函数是在列表后方增添多个值或者一个列表。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值