一、归并排序
1、理解: 归并排序是将一个列表每次都分为两个部分,然后分别进行排序,然后再进行合并,合并的过程中,是由两个有序的列表进行合并的,先分别定义,两个列表的下标,然后分别比较下标的值,然后将下标较小的数添加到新的列表中,数字小的乙方下标后移,依次来完成合并操作。
时间复杂度为: O(nlogn), 归并排序是利用开辟新的空间来达到减少时间复杂度的目的。
代码:
#先定义一个merge_sort(li), 实现对列表进行 递归 分割。
def merge_sort(li):
if len(li) <= 1: #此时列表的长度为1,则表明已经是最小的元素了
return li
num = len(li)//2
#递归操作开始
left = merge_sort(li[:num]) #利用切片开始分为left,right部分
right = merge_sort(li[num:])
return merge(left, right)
def merge(left, right):
l, r = 0, 0
result = []
while l < len(left) and r <len(right):
if left[l] < right[r]: # 如果left列表中元素小于right中相同位置元素
result.append(left[l])
l += 1
else: # 添加right列表中元素
result.append(right[r])
r += 1
#将剩余的元素添加
## 因为合并之前已经是排序过的(利用递归操作),所以合并后的列表也是排序过的
result += left[l:]
result += right[r:]
return result
if __name__ == '__main__':
list1 = [1, 0, 2, 4, 8, 0, 1,100, 5]
list1 = merge_sort(list1)
print(list1) # [0, 0, 1, 2, 4, 8, 1, 5, 100]
望您:
“情深不寿,强极则辱,谦谦君子,温润如玉”。