分治算法(二)

1 实现归并排序

def merge_sort(nums):
	n = len(nums)
	mid = n // 2
	if n <= 1:
		return nums
	# 分
	left_li =merge_sort(nums[:mid])
	right_li = merge_sort(nums[mid:])
	
	# 治
	left_pointer,right_pointer = 0,0
	result = []
	while left_pointer < len(left_li) and right_pointer < len(right_li):
		if left_li[left_pointer] < right_li[right_pointer]:
			
			result.append(left_li[left_pointer])
			left_pointer += 1
		else:
			result.apped(right_li[right_pointer])
			right_pointer += 1
	# 合
	result += left_li[left_pointer:]
	result += right_li[right_pointer:]
	return result
			

2实现一个快速指数

a = p(w,n)
def my_pow(x,n):
    """快速指数"""
    if n == 0:
        return 1
    if n < 0:
        return 1 / py_pow(x,-n)
    elif n % 2 :
        return my_pow(x*x,n // 2)*x
    else:
        return my_pow(x*x,n//2)

3 搜索峰值

数组没有重复值,但可能存在多个峰值,返回任意一个峰值的index

def pesk_search(alist):
	return helper_peak(alist,0,len(alist)-1)
def helper_peak(alist,start,end):
	if start == end:
		return start
	if (start+1 == end):
		if alist[start] > alist[end]:
			return start
		return end
	mid = (start+end) // 2
	if alist[mid]>alist[mid-1] and alist[mid]>alist[mid+1]:
		return mid
	elif alist[mid-1]>alist[mid] and alist[mid]>alist[mid+1]:
		return helper_peak(alist,start,mid-1)
	else:
		return helper_peak(alist,mid+1,end)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值