python常用程序算法
一。冒泡排序:
1.冒泡排序是将无序的数字排列成从小到大的有序组合:
过程:对相邻的两个元素进行比较,对不符合要求的数据进行交换,最后达到数据有序的过程。
规律:
1.冒泡排序的趟数时固定的:n-1
2.冒泡排序比较的次数时固定的:n*(n-1)/2
3.冒泡排序交换的次数时不固定的:但是最大值为:n*(n-1)/2
注意:n = 数据个数,排序过程中需要临时变量存储要交换的数据
eg:
l=[, , ,,,,]
for i in range(len(l)-):
for j in range(len(l)-):
if l[j]>l[j+]:
tmp=l[j]
l[j]=l[j+]
l[j+]=tmp
print(l)
二。选择排序:
list=[10,3,5,2,9]
过程,循环当前列表,将当前循环到的值与余下的每个数字相比较,如果比当前值小,就与当前值交换位置。
eg:
l=[, , ,,,,]
for i in range(len(l)-):
for j in range(i+,len(l)):
if l[j]<l[i]:
tmp=l[i]
l[i]=l[j]
l[j]=tmp
print(l)
优化:每次找到最小值后不立即替换,而是等待本次循环结束再替换,减少了操作的次数,效率提高了
l=[688, 888, 711,999,1,4,6]
for i in range(len(l)-1):
Min=i
for j in range(i+1,len(l)):
if l[Min] > l[j]:
Min=j
tmp=l[Min]
l[Min]=l[i]
l[i]=tmp
print(l)
三。插入排序:
插入排序(Insertion Sort)的基本思想是:将列表分为2部分,左边为排序好的部分,右边为未排序的部分,循环整个列表,每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。
eg:
array=[9,8,7,6,5,4,3,2,1] for i in range(1,len(array)):
current_val=array[i]
current_position=i
while current_position >0 and array[current_position-1] > current_val:
array[current_position]=array[current_position-1]
current_position-=1
array[current_position]=current_val
print(array)
四。快速排序:
def quick_sort(array,first,last):
if first >= last: #如果first=last证明不能再继续分半操作,每组只剩下一个元素,所有first=end,这时跳出程序
return
start=first
end=last
mid=array[first] while start < end:
#将end往左移动
while start < end and array[end] > mid: #如果成立则一直将end往左移动
end-=1
array[start]=array[end] #如果跳出上层循环则证明当前arrary[end]的值小于mid的值,此时将小的值移动至array[start]位置
#将start往右移动
while start < end and array[start] < mid:
start+=1
array[end]=array[start]
array[end]=mid #当最外层循环不成立时证明start与end相等,这时把start或者end位置赋值成mid的值即可
#继续左边的分半
quick_sort(array,first,end-1)
#继续右边的分半
quick_sort(array,end+1,last) if __name__ == '__main__':
import random,time
array=[]
for i in range(8):
array.append(random.randrange(1,10000))
# array=[11,22,17,9,8,7,6,5,4,3,2]
quick_sort(array,0,len(array)-1)
print(array)
python常用程序算法的更多相关文章
- 第四百一十五节,python常用排序算法学习
第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...
- Python常用排序算法
1.冒泡排序 思路:将左右元素两两相比较,将值小的放在列表的头部,值大的放到列表的尾部 效率:O(n²) def bubble_sort(li): for i in range(len(li)-1): ...
- 常用排序算法的python实现和性能分析
常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...
- Python/Java程序员面试必备常用问题解析与答案
转自AI算法联盟,理解python技术问题,以及一些常见的java面试中经常遇到的问题,这些面试问题分为四类: 是什么(what) 如何做(how) 说区别/谈优势(difference) 实践操作( ...
- python常用算法学习(3)
1,什么是算法的时间和空间复杂度 算法(Algorithm)是指用来操作数据,解决程序问题的一组方法,对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但是在过程中消耗的资源和时间却会有很大 ...
- Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...
- Java 常用排序算法/程序员必须掌握的 8大排序算法
Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...
- Python实现常用排序算法
Python实现常用排序算法 冒泡排序 思路: 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完 ...
- Python 常用算法记录
一.递归 汉诺塔算法:把A柱的盘子,移动到C柱上,最少需要移动几次,大盘子只能在小盘子下面 1.当盘子的个数为n时,移动的次数应等于2^n – 1 2.描述盘子从A到C: (1)如果A只有一个圆盘,可 ...
随机推荐
- 洗礼灵魂,修炼python(21)--自定义函数(2)—函数文档,doctest模块,形参,实参,默认参数,关键字参数,收集参数,位置参数
函数文档 1.什么是函数文档: 就是放在函数体之前的一段说明,其本身是一段字符串,一个完整的函数需要带有函数文档,这样利于他人阅读,方便理解此函数的作用,能做什么运算 2.怎么查看函数文档: func ...
- python第七十九天--第十四周作业
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Python基础知识:测试代码
1.Python标准库中的模块unittest提供了代码测试工具. 单元测试用于核实函数的某个方面没有问题: 测试用例是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求. 通俗的理解 ...
- httpd服务器的真实ip获取难题
web服务器httpd中想要获取真正的ip是个难度,我们先要在配置文件中定义错误日志的格式:如下所示: 然后获取ip 上面三条输出日志中,第一条是直接访问http://172.16.213.157/i ...
- godaddy.com 都转到 www.dnspod.cn
我们在godaddy上注册了域名,但因为godaddy对域名解析的诸多限制和缓慢. 所以必需把域名服务器更改为dnspod上,然后再在dnspod上做A记录,CNAME等设置都很方便.
- Linux 小知识翻译 - 「路径设置」
这次聊聊路径的使用,这里的路径是「命令搜索路径」的简称. 在Linux上执行命令的时候,本来是需要命令的所在位置的绝对路径的,就像「/usr/bin/passwd」这样. 但是,对于经常使用的命令,如 ...
- spring IOC中三种依赖注入方式
Spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则,用来消减计算机程序之间的耦合问题,控制反转一般分为两种类型,依赖注入和依赖查找,依赖什么?为什么需要依赖?注入 ...
- 计算器和Menu
MainActivity.java import android.app.Activity; import android.content.Intent; import android.os.Bund ...
- Java 浅拷贝,深拷贝
从Java 强引用.软引用,弱引用http://blog.csdn.net/jltxgcy/article/details/35558465一文中,我们看到把一个对象赋值给另一个对象,本质上 ...
- 关于使用spring mvc前后端上传数据日期格式
前端页面传入数据到后台,String,int等等类型都很友好,但是Date类型不能直接上传到服务器.否则会报异常![在这里插入图片描述](https://img-blog.csdnimg.cn/201 ...