python中mid_Python算法

Python算法

一、二分查找1.1 普通的二分查找1.2 带旋转数组的二分查找1.3 搜索旋转排序数组

二、顺序查找三、排序算法3.1 冒泡排序3.1 选择排序3.3 插入排序3.4 快速排序3.5 归并排序3.6 希尔排序

参考链接

一、二分查找

时间复杂度 O(logN)

1.1 普通的二分查找

python算法图解中的解释   通过不断迭代mid的值,来查找参数

def binary_search(nums,target):

# 确定lp和rp的索引值,从两边遍历查找

lp,rp = 0,len(nums)-1

while lp <= rp:

# 迭代求中间的索引值

mid = lp + (rp - lp) // 2

# 如果target等于中间值,返回中间值的索引

if nums[mid] == target:

return mid

# 如果target大于中间值,说明target在中间值的右边

elif target > nums[mid]:

lp = mid + 1

# else最后一种情况,target小于中间值,在其左边,更新rp的值

else:

rp = mid - 1

return None

nums = [1,3,4,56,67,78,980]

print(binary_search(nums,980))

1.2 带旋转数组的二分查找

例题链接: https://leetcode-cn.com/problems/search-in-rotated-sorted-array/

首先判断旋转点在中间值的左边还是右边然后进行二分查找

def xuanzhuan_search(nums,target):

lp,rp = 0,len(nums)-1

while lp <= rp:

mid = lp + (rp-lp)//2

if nums[mid] == target:

return mid

# 中间值大于lp的值,说明旋转点在中间值的右边

elif nums[mid] >= nums[lp]:

if nums[lp] <= target < nums[mid]:

rp = mid - 1

else:

lp = mid + 1

# 旋转点在中间值的左边

else:

if nums[mid] < target <= nums[rp]:

lp = mid + 1

else:

rp = mid - 1

return False

nums = [56,67,78,980,1,3,4]

print(xuanzhuan_search(nums,100))

1.3 搜索旋转排序数组

https://leetcode-cn.com/problems/search-in-rotated-sorted-array-ii/

由于返回True or False 在重复值上可进行去重操作

class Solution(object):

def search(self, nums, target):

"""

:type nums: List[int]

:type target: int</

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值