【编程学习整理6】:用python完成归并排序算法

本文详细介绍了如何使用Python实现归并排序算法,通过递归思路分解数组,最终达到排序目的。在调试过程中遇到的问题及解决过程也被详细记录。
摘要由CSDN通过智能技术生成

第一部分
归并排序的思路:
假设有一段长度为8的数组
通过函数不断地递归自己,将这段数组不断拆分成
8
4 4
2…
1…
的结构,当长度为1时,不满足递归条件,因此此时函数向下探到头了,开始向上弹。上弹一层后发现
现在面前的数组即倒数第二层长度为2的数组,开始调用另外一个函数对这个len(a)=2的数组进行排序
排完了再上一层,长度为4,此时发现从3,4号又可以探下去,于是又进行类似上面排序的循环。
总地来说,一个总长为8的数组,合并函数曾经经过的操作为:
对比2-2-4-2-2-4-8

代码如下

def gbsort(nums,l,r):
    if l<r:
        m=(l+r-1)/2
        gbsort(nums,l,m)
        gbsort(nums,m+1,r)
        merge(nums,l,m,r)
    else:
        return
def merge(nums,l,m,r):
    n1=m-l+1
    n2=r-m
    left=[0]*(n1)
    right=[0]*(n2)
    for i in range(n1):
        left[i]=nums[l+i]
    for i in range(n2):
        right[i]=nums[m+1+i]
    i=j=0
    k=l
    while i<n1 and j<n2:
        if left[i]<right[j]:#  "="
            nums[k]=left[i]
            i+=1
            k+=1
        else:
            nums[k]=right[j]
            j+=1
            k+=1
    while i<n1:
        nums[k]=left[i]
        i+=1
        k+=1
    while j<n2:
        nums[k]=right[j]
        j+=1
        k+=1
nums=[9,7,6,5,4,8]
n=len(nums)
gbsort(nums,0,n-1)
print(nums)

这一段代码在我调试过程中不断报错,经过千辛万苦终于发现原因:

m=(l+r-1)/2
中应为//
因为//才是除法且向下取整,/完是float类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值