归并排序实现(python)

归并排序的主要思想是,找到该列表的中间点,然后分别对左右字表分别进行排序,最后将两个排好序的列表组合在一起。还是采取分而治之的思想,用递归的方式将这个列表不停的划分为更小的列表,直到不能再划分为止(left == right)。然后用merge函数将两个排好序的列表不停组合,完成整个列表的排序。

import random#用于测试时生成随机数序列
import numpy#用于生成一个用于排序的空数组空间


def mergesort (listp):
    tempbuffer=numpy.empty(len(listp))
    mergesorthelper(listp, tempbuffer, 0, len(listp)-1)


def mergesorthelper (listp, tempbuffer, left, right) :
    if left < right:
        middle = (left + right) // 2
        mergesorthelper(listp, tempbuffer, left, middle)
        mergesorthelper(listp, tempbuffer, middle+1, right)
        merge(listp, tempbuffer, left, middle, right)


def merge(listp, tempbuffer, left, middle, right):
    i = left
    j = middle+1
    for a in range(left, right + 1):
    	#若i超界但a没有,说明右边的列表一定还有剩余元素。
        if i > middle:
            tempbuffer[a] = listp[j]
            j += 1
        elif j > right:
            tempbuffer[a] = listp[i]
            i += 1
        elif listp[i] < listp[j]:
            tempbuffer[a] = listp[i]
            i += 1
        else:
            tempbuffer[a]=listp[j]
            j += 1
    for k in range(left, right+1):
        listp[k] = tempbuffer[k]
a=[]
for i in range(50):
    a.append(random.randint(0, 100))
print(a)
print('\n')
mergesort(a)
print(a)

归并算法,因为每一层的合并算法复杂度为n,而划分的复杂度由于每次割去一般,复杂度为logn,所以其在所有情况下最大运行时间为nlogn。

numpy库一般用于科学计算,可以轻松的处理数组。numpy.empty(n)就是生成一个有n个元素的数组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值