python归并排序理解不了,python实现归并排序 -- 详细思路分析

本文深入探讨了两种经典的排序算法——归并排序和快速排序。首先介绍了归并排序的思想,通过不断地分解和合并元素实现排序。接着详细解释了快速排序的实现步骤,以一个具体的例子展示了如何将一个列表进行快速排序。最后,提供了完整的Python代码实现,帮助读者理解这两种排序算法的细节和逻辑。
摘要由CSDN通过智能技术生成

1. 归并排序思想

是建立在归并操作上的一种有效的排序算法。先将数组分解成多个元素,然后对分解后的元素进行排序和合并。

2. 快速排序实现步骤

假设有一个列表[9,7,3,3,6,2,1,4,10],需要使用快速排序,将其排序为有序列表。、

2.1 分解过程

找到数组中间位置mid mid = len(target_list) // 2

从数组中间位置不断拆分,直到将数组拆分为单个元素

98de5fd36dae

分解过程图

代码实现

def merge_sort(target_list):

"""拆分过程"""

n = len(target_list)

# 中间元素位置的索引

mid = n // 2

if n <=1 :

return alist

# 使用递归进行拆分

# left_ist 和 right_list 代表采用归并排序后形成的新的列表

left_list = merge_sort(target_list[:mid])

right_list = merge_sort(target_list[mid:])

2.2 排序和合并过程

98de5fd36dae

排序和合并图解

创建两个游标【图上的LEFT和RIGHT】,使用游标对各个部分的元素进行排序

○ LEFT游标放在左边列表的首位,RIGHT游标放在右边列表的首位

○ 对比当前两游标位置的元素,如果RIGHT游标所指向的数小,则将RIGHT游标所指向的元素排入新列表,然后RIGHT游标右移;如果LEFT右边所指向的数小,则将LEFT游标所指向的元素排入新列表,然后LEFT右移。

○ 直到左边列表或右边列表没有元素后,将剩余元素添加进新列表

○ 返回排序好的新列表

排序完成后合并,然后继续和其他数组进行排序和合并的过程

代码实现

def merge_sort(target_list):

n = len(target_list)

# 当n的长度小于1时停止拆分【递归终止条件】

if n <= 1:

return target_list

mid = n // 2

# 使用递归,将列表拆分

# 使用left_list 和 right_list接受拆分并排序后的result

left_list = merge_sort(target_list[:mid])

right_list = merge_sort(target_list[mid:])

# 排序 + 合并过程

# 创建左、右游标,并置于首位

left_cursor = 0

right_cursor = 0

# 新列表,用于接受排序后的元素

result = []

while left_cursor < len(left_list) and right_cursor < len(right_list):

if left_list[left_cursor] <= right_list[right_cursor]:

result.append(left_list[left_cursor])

left_cursor += 1

else:

result.append(right_list[right_cursor])

right_cursor += 1

# 当左边或右边的列表内没有元素时,result添加剩下列表内的元素

result += left_list[left_cursor:]

result += right_list[right_cursor:]

return result

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值