当前位置:
首页 > temp > python入门教程 >
-
python 算法 一
- 二分查找算法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
def list_search(l,v): left = 0 right = len (l) - 1 while left < = right: mid = (left + right) / / 2 if l[mid] = = v: return mid elif l[mid] < v: left = mid + 1 else : right = mid - 1 else : return None l = list ( range ( 100 )) s = list_search(l, 50 ) print (s) |
个人总结:查找的值所在的数据类型中以数据中心的值分割,如果等于则找到,如果小于中心值,查找的值在右部分,重新定义左边最后一个值,就是中心值加一,大于,值在左,重新定义右边值,减一,直到找到,否则返回none。
- 排序算法
1.冒泡排序:
1
2
3
4
5
6
7
8
9
10
|
import random def bubble_sort(l): for i in range ( len (l) - 1 ):<br data - filtered = "filtered" > exchange = False for x in range ( len (l) - i - 1 ): if l[x] > l[x + 1 ]: l[x], l[x + 1 ] = l[x + 1 ],l[x]<br data - filtered = "filtered" > exchange = True <br data - filtered = "filtered" > if not exchange:<br data - filtered = "filtered" > return <br data - filtered = "filtered" > l = [random.randint( 1 , 10 ) for i in range ( 10 )] s = bubble_sort(l) print (l) |
个人总结:比较,i比较几次,(索引0-9,长度是十个所以减一,不然多循环一次),减去比较完的次数,在减一,比较大于正序,调换,小于反序。定义一个bool,如果走了调换位置,就设置为True,没有走的话,就证明已经排序完成了,就直接返回。
2.选择排序
1
2
3
4
5
6
7
8
9
10
|
def select_sort(l): for i in range ( len (l) - 1 ): min = i for x in range (i, len (l)): if l[x] < l[ min ]: min = x<br data - filtered = "filtered" > l[i],l[ min ] = l[ min ],l[i] l = [random.randint( 1 , 10 ) for i in range ( 10 )] select_sort(l) print (l) |
循环一个然后和后面的值循环比较,比我小,换你来当最小的,换位,大,直接换。
3.插入排序
1
2
3
4
5
6
7
8
9
10
11
12
|
def insert_sort(l): for i in range ( 1 , len (l)): tmp = l[i] j = i - 1 #后面的值 while j > = 0 and l[j] > tmp: l[j + 1 ] = l[j] #把j的位置向前面移动一位 j - = 1 #和后面的继续比较 l[j + 1 ] = tmp #循环结束条件不成立,索引负数,比j大的直接插 l = [ 1 , 6 , 5 , 8 , 9 , 7 , 3 , 4 , 2 ] insert_sort(l) print (l) |
#从第一个值开始比较,第0个是比较对象
快排
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
def partition(l,left,right): tmp = l[left] while left < right: while left < right and l[right] > tmp : right - = 1 l[left] = l[right] while left < right and l[left] < tmp : left + = 1 l[right] = l[left] l[left] = tmp return left def quick_sort(l,left,right): if left < right: mid = partition(l,left,right) #递归 quick_sort(l,left,mid - 1 ) #左边在重新快排 quick_sort(l,mid + 1 ,right) #右边在重新快排 l = [ 6 , 3 , 4 , 8 , 5 , 2 , 9 , 1 , 17 , 7 , 10 , 11 ] quick_sort(l, 0 , len (l) - 1 ) print (l) |
循环左边之和右边的值,拿第一个值,和最右边的值比较比tmp大向左边就继续找,比tmp小就把它换到左边,左边的相反操作,最后把tmp放到中间的位置,然后把tmp返回。
出处:https://www.cnblogs.com/humorous-ecg/p/14961847.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数