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</