利用Spyder的GDB调试器单步调试加手动推导学习归并排序

好久不见!由于做比赛项目和期末考试搁置了一个多月没更新博客...今天先补一篇归并排序的灵魂推导!

(下面会以调试器的截图一步步看归并排序的变量的变化过程)

首先,归并排序使用分而治之的策略,即把序列不停地二分,直到最小单元,再不停地合并,同时进行排序,通过函数递归最终实现分而治之的结果。

代码如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Jul 16 16:24:59 2019

@author: honorwh
"""
#归并排序
#分而治之
#递归
def MergeSort(A):
    if len(A) <= 1:
        return A
    half = int(len(A) // 2)
    first = MergeSort(A[0:half])
    second = MergeSort(A[half:len(A)])
    i = 0
    j = 0
    newA = []
    while i < len(first) or j < len(second):
        if i < len(first) and j < len(second):
            if first[i] <= second[j]:
                newA.append(first[i])
                i += 1
            else:
                newA.append(second[j])
                j += 1
        else:
            if i < len(first):
                newA.append(first[i])
                i += 1
            if j < len(second):
                newA.append(second[j])
                j += 1
    return newA
A = [3,1,5,6,7,4,2,8]
A = MergeSort(A)
print(A)

这个代码其实挺好理解的,下面开始图片化过程,以图片右上角的变量名的value值变化,再加上自己手动推导,可以更深入的理解记忆归并排序。

到这里,first已经排好了,second也同理,留给自己推导就好了。 

最终排序完成,也学会了如何在Spyder单步调试,一举两得。接下来会继续不断更新博文,谢谢观看。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值