Python算法 插入+归并

3.插入排序:
每次考虑一个元素,左边都是排好序的,一个一个往前比,插入到一个位置,前面的元素都比他小
后面的元素都比他大,插入完成,后面元素全部右移一个位置

def insertionsort(s):
	for index in range(1,len(s)):
		while 0<index and s[index]<s[index-1]:
			s[index],s[index-1] = s[index-1],s[index]
		index -= 1
	return s

4.归并排序

         归并排序的实现分为递归实现非递归(迭代)实现。递归实现的归并排序是算法设计中分治策略的典型应用,我们将一个大问题分割成小问题分别解决,然后用所有小问题的答案来解决整个大问题。非递归(迭代)实现的归并排序首先进行是两两归并,然后四四归并,然后是八八归并,一直下去直到归并了整个数组。

def mergeSort(s):
#递归分割
    if len(s)==1:
        return s
    while len(s)>1:
        mid = len(s)//2
        left_half = s[:mid]
        right_half = s[mid:]
        mergeSort(left_half))
        mergeSort(right_half)
    #归并
    i, j, k =0, 0, 0
    while i<len(left_half) and j<len(right_half):
        if left_half[i]>right_half[j]:
            s[k] = right_half[j]
            j += 1
        else:
            s[k] = left_half[i]
            i  += 1
        k += 1
    while i<len(left_half):
        s[k] = left_half[i]
        i += 1
        k += 1
    while j<len(right_half):
        s[k] = right_half[j]
        j += 1
        k += 1
    return s

加强版:

def mergesort(s):
    start = []
    end = []
    while len(s)>1:
        a = min(s)
        b = max(s)
        start.append(a)
        end.append(b)
        s.remove(a)
        s.remove(b)
    if s:
        start.append(s[0])
    end.reverse()
    return (start+end)

参考链接https://github.com/ChinaRush/Python-1

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值