20分钟回顾基础排序与二分查找
来源:互联网 发布:仿快手源码 编辑:程序博客网 时间:2024/05/17 08:25
来来,复习基础的数据结构吧~~
知乎上有人讲,如果只是应付面试,重要程度:
数据结构:二叉树>散列表>栈>队列>堆>一般树>图>其他
算法:二分法>冒泡>快速排序>加密算法>其他排序算法>随机数的算法>其他
下面需要20分钟就能 浏览完,最最基础的:基本排序与二分查找~~
排序
#插入排序def insertion_sort(nums): for i in range(1,len(nums)): key=nums[i] #把nums[i],插入到已经排序好的nums[0,…,i-1]中 j=i-1 while j>=0 and nums[j]>key: nums[j+1]=nums[j] j-=1 nums[j+1]=key return#冒泡排序def bubble_sort(nums): for i in range(len(nums)): for j in range(i+1,len(nums)): if nums[i]>nums[j]: nums[i],nums[j]=nums[j],nums[i] return#快速排序def quicksort(nums,p,r): if p<r: q=partition(nums,p,r) print(p, q, r) quicksort(nums,p,q-1) quicksort(nums,q+1,r) returndef quicksort2(nums,p,r): #非递归实现,只需要申请一个 栈来记录 需要排序的起始位置与终点位置 stack=[p,r] while stack: new_r=stack.pop() new_p=stack.pop() q=partition(nums,new_p,new_r) if new_p<q-1: stack.extend([new_p,q-1]) if new_r>q+1: stack.extend([q+1,new_r]) return numsdef partition(nums,p,r): x=nums[r] i=p-1 #记录位置 for j in range(p,r): if nums[j]<=x: i+=1 nums[i],nums[j]=nums[j],nums[i] nums[i+1], nums[r] = nums[r], nums[i+1] return i+1
二分查找
#非递归def search2(a, m): low = 0 high = len(a) - 1 while low <= high: mid = (low + high) //2 midval = a[mid] if midval < m: low = mid + 1 elif midval > m: high = mid - 1 else: print(mid) return mid print(- 1) return -1#递归def search(a,m,low,high): while low<=high: mid=(low+high)//2 midval = a[mid] if midval < m: return search(a,m,mid+1,high) elif midval > m: return search(a, m,low, mid - 1) else: print(mid) return mid print (-1) return -1
模块 bisect:
这个模块只有几个函数,一旦决定使用二分搜索时,立马要想到使用这个模块.
>>>import bisect
>>>dir(bisect)
[‘builtins‘, ‘cached‘, ‘doc‘, ‘file‘, ‘loader‘, ‘name‘, ‘package‘, ‘spec‘, ‘bisect’, ‘bisect_left’, ‘bisect_right’, ‘insort’, ‘insort_left’, ‘insort_right’]
举例说明:
“`python
L = [1,3,3,6,8,12,15]
x=4
bisect.insort(L,x)#插入 L则变为[1, 3, 3, 4, 6, 8, 12, 15]
bisect.bisect(L,x)#返回应该插入的位置 L不变
0 0
- 20分钟回顾基础排序与二分查找
- 二分排序与二分查找
- 二分排序与二分查找
- 二分排序与二分查找
- 排序与二分查找
- LeetCode基础-查找-排序数组二分查找
- 二分查找与冒泡排序
- 插入排序与二分查找
- 快速排序与 二分查找
- sort排序与二分查找
- 排序与查找(一): 二分查找
- 简单的快速排序与二分查找
- 二分查找算法与快速排序
- 直接插入排序与二分查找
- 【C/C++】冒泡排序与二分查找
- 温故而知新-java排序与二分查找
- 基础排序算法与二分查找算法Java版本(下)
- 算法基础:排序与查找
- iPhone新功能 插根网线就能上网
- 浅谈机器学习的分类
- Linux 新手容易犯的 7 个错误
- python解决“杨辉三角”问题
- 解决:android studio2.2.3 卡死 ,卡在Gradle:Build Running的解决办法
- 20分钟回顾基础排序与二分查找
- 如何选择合适的Linux系统和版本 day1
- OA CRM ERP傻傻分不清吗?
- Java接口知识
- 数据库表中读取信息
- 收集的一些工具类
- 一次dns缓存引发的惨案
- Java并发编程实战:并发基础构建模块
- (UVA)10082