归并排序和快速排序时间复杂度均为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()函数是在列表后方增添多个值或者一个列表。