Python排序算法
不觉已经有半年没写了,时间真是容易荒废,这半年过了个春节,去拉萨旅行。本职工作也很忙,没有开展系统的学习和总结。
今年开始静下心来从基础开始学习,主要分为三部分,算法、线性代数、概率统计。
首先学习算法,用Python语言实现,主要是为了了解其中的思想,毕竟现成的轮子很多了。接下来学习线性代数和概率统计,主要通过日本的那两本书学习,编程实现方面从数值分析开始学习,也许要用到MATLAB。
算法,学习的书籍是《python算法教程》,涵盖的知识比较全,缺点是需要有一定的基础,我是先看了这本书,又看了《程序员的数学》(这个看起来太轻松了),然后对里面的思想有了感性的认识,但是具体到算法,还是很难写出来的,所以想把书中涉及到的问题,代码,都自己实现一遍,作为复习。
先从最简单的排序开始,可以从头撸到尾,也可以反过来,可以写成递归,也可以写成循环。
1. 从头撸到尾,就是选出小的,放到最前面。
递归
def sort_f(seq,i):
if i==0:
return
sort_f(seq,i-1)
j=i
while j>0 and seq[j-1]>seq[j]:
seq[j],seq[j-1]=seq[j-1],seq[j]
j-=1 seq = [9,8,7,6,5,4,3,2,1] ------------------------------------------------------- >>> sort_f(seq,len(seq)-1)
>>> seq
[1, 2, 3, 4, 5, 6, 7, 8, 9]
循环
def sort_f2(seq):
for i in range(len(seq)):
for j in range(i,len(seq)):
if seq[j]<seq[i]:
seq[i],seq[j]=seq[j],seq[i]
2.从尾撸到头,就是选出最大的,放到最后
递归
def sort_e(seq,i):
if i==0:
return
sort_e(seq,i-1)
j = i
while j>0 and seq[j]<seq[j-1]:
seq[j],seq[j-1]=seq[j-1],seq[j]
j-=1
递归或者这样写
def sort_ee(seq,i):
if i==0:
return
maxj=i
for j in range(i):
if seq[j]>seq[maxj]:
maxj=j
seq[i],seq[maxj]=seq[maxj],seq[i]
sort_ee(seq,i-1)
循环
def sort_e2(seq):
i=len(seq)-1
while i>0:
for j in range(i):
if seq[j]>seq[i]:
seq[i],seq[j]=seq[j],seq[i]
i-=1
还有一些其它好玩的排序算法
3.侏儒排序
def gnomesort(seq):
i=0
while i<len(seq):
if i==0 or seq[i-1]<seq[i]:
i+=1
else:
seq[i-1],seq[i]=seq[i],seq[i-1]
i-=1
4.归并排序
def mergesort(seq):
mid = len(seq)//2
lft = seq[:mid]
rgt = seq[mid:]
if len(lft)>1: lft = mergesort(lft)
if len(rgt)>1: rgt = mergesort(rgt)
res=[]
while lft and rgt:
if lft[-1]>=rgt[-1]:
res.append(lft.pop())
else:
res.append(rgt.pop())
res.reverse()
return (lft or rgt) + res
Python排序算法的更多相关文章
- python排序算法实现(冒泡、选择、插入)
python排序算法实现(冒泡.选择.插入) python 从小到大排序 1.冒泡排序: O(n2) s=[3,4,2,5,1,9] #count = 0 for i in range(len(s)) ...
- Python排序算法之选择排序定义与用法示例
Python排序算法之选择排序定义与用法示例 这篇文章主要介绍了Python排序算法之选择排序定义与用法,简单描述了选择排序的功能.原理,并结合实例形式分析了Python定义与使用选择排序的相关操作技 ...
- 44.python排序算法(冒泡+选择)
一,冒泡排序: 是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个,如果他们的排序错误就把他们交换过来. 冒泡排序是稳定的(所谓稳定性就是两个相同的元素不会交换位置) 冒泡排序算法的运作如下 ...
- python 排序算法总结及实例详解
python 排序算法总结及实例详解 这篇文章主要介绍了python排序算法总结及实例详解的相关资料,需要的朋友可以参考下 总结了一下常见集中排序的算法 排序算法总结及实例详解"> 归 ...
- 带你掌握4种Python 排序算法
摘要:在编程里,排序是一个重要算法,它可以帮助我们更快.更容易地定位数据.在这篇文章中,我们将使用排序算法分类器对我们的数组进行排序,了解它们是如何工作的. 本文分享自华为云社区<Python ...
- Python排序算法——冒泡排序
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10786904.html 一.冒泡排序(Bubb ...
- Python排序算法——插入排序
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10787464.html 一.插入排序(Inse ...
- Python排序算法——选择排序
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10787340.html 一.选择排序(Sele ...
- Python排序算法——快速排序
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10768593.html 排序算法(Sortin ...
随机推荐
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数006, image,影像处理(像素图)
<zw版·Halcon-delphi系列原创教程> Halcon分类函数006, image,影像处理(像素图) 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“* ...
- 方法过滤器,分布式缓存 Memcached实现Session解决方案
控制器-〉方法过滤器-〉controller-> 方法 所以通过建立controller基类的方法进行方法过滤,所有控制器先执行基类的OnActionExecuting 方法. using Sp ...
- JSTL函数
JSTL包含了一系列标准函数. 引入:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functi ...
- [书]WALL·E、龙与地下铁、中国美丽的故事、故事新编、四十自述、书虫、人工智能、大话数据结构
下午有时间,逛了逛了书城,看到了一些书.在这里总结一些自己的感受. 一.<龙与地下铁> 这本书是我首先看到的,就在靠前的新书区.是小说,我没看里面的内容,但是被书封皮的宣传文案 ...
- Hosts文件的使用
hosts文件是什么?在哪里?hosts文件:系统文件,可以记事本打开并编辑.一般用于域名到ip地址的解析.当用户在浏览器中输入网络的域名时,系统首先会自动从hosts文件中找到对应的ip地址,一旦找 ...
- 一个通用的DataGridView导出Excel扩展方法(支持列数据格式化)
假如数据库表中某个字段存放的值“1”和“0”分别代表“是”和“否”,要在DataGridView中显示“是”和“否”,一般用两种方法,一种是在sql中直接判断获取,另一种是在DataGridView的 ...
- PHP-----类与对象,成员方法,成员属性,构造方法,析构方法
php里面的类-----class XX{},通过类的定义,可以使用调用类里面的成员属性和成员方法. 对象---一个类就是一个对象,一个对象可以有多个属性,一个类可以有多个成员方法. 构造方法:一个类 ...
- hdu 5358 First One
题目链接:hdu 5358 思路不难理解,就是个尺取法而已,floor(log2X) + 1 就是求 X 的二进制表示的位数,对于题目来说这个值最多只是 30+,从这里入手开始枚举,运用尺取法可以达到 ...
- 转!!URL 传+号到后台变空格问题解决方案
网上很多解决方法,但是前提是get请求(或者是post请求后面追加的参数),让我试了很久(我是post),没成功!引以为戒!! 今天在调试客户端向服务器传递参数时,参数中的“+”全部变成了空格,原因是 ...
- win7文件夹图标中多了一把小锁打不开文件夹怎么办?
win7文件夹图标中多了一把小锁打不开文件夹怎么办?解决办法一:右击目录→取得管理员权限!该方法适用于win7旗舰版.解决办法二:右击目录→属性→安全→高级→选择everyone→更改权限→勾上完全访 ...