python实现各种排序
1、冒泡排序:
# -*- coding: utf-8 -*-
def BubbleSort(a):
n=len(a)
for i in range(0,n-1):
swapped=False
for j in range(0,n-i-1):
if a[j]>a[j+1]:
a[j],a[j+1]=a[j+1],a[j]
swapped=True
if not swapped: break
print a
a=[10,8,3,2,4,6,9]
BubbleSort(a)
input()
代码不难,但是需要注意的几个地方:
注意循环的嵌套以及循环的作用域,break是对第一个for循环起作用的;还有a[j],a[j+1]=a[j+1],a[j]实现互换了两个元素,举例:a=1 b=2 a,b=b,a+b 结果a=2,b=3,b是有原来的a,b相加得到的,并不是用的新的a值。
一个冒泡的变种,就是每次把最小的值放在前面:
1 # -*- coding: utf-8 -*-
2 def BubbleSort(a):
3 n=len(a)
4 for i in range(0,n-1):
5 for j in range(n-1,i,-1):
6 if a[j]<a[j-1]:
7 a[j],a[j-1]=a[j-1],a[j]
8 print a
9 a=[10,8,3,2,4,6,9]
10 BubbleSort(a)
11 input()
注意一点,range(0,n)和range(n,0,-1),都是左边的值能取到,如range(0,10)得到0-9这10个数,range(10,0,-1)得到10-1这10个数,这与数组的下标要对应好。
2、插入排序:
def InsertSort(a):
n=len(a)
for i in range(1,n):
for j in range(i,0,-1):
if a[j]<a[j-1]:
a[j],a[j-1]=a[j-1],a[j]
else: break
print a
a=[3,7,5,8,9,1,10]
InsertSort(a)
input()
这种方法是如果满足条件每次都交换前后两个值,感觉效率不是很高。
另一种方式:
def InsertSort(a):
n=len(a)
for i in range(1,n):
k=a[i]
j=i-1
while j>=0 and a[j]>k:
a[j+1]=a[j]
j=j-1
a[j+1]=k
print a
a=[3,7,5,8,9,1,10]
InsertSort(a)
input()
插入排序的改进版,希尔排序:
def ShellSort(a):
n=len(a)
span=n/2
while span>=1:
for i in range(span,n):
k=a[i]
j=i-span
while j>=0 and a[j]>k:
a[j+span]=a[j]
j=j-span
a[j+span]=k
span=span/2
print a
a=[3,7,5,8,9,1,10]
ShellSort(a)
input()
3、选择排序:
def SelectSort(a):
n=len(a)
for i in range(0,n-1):
min=i
for j in range(i+1,n):
if a[j]<a[min]:
min=j
a[i],a[min]=a[min],a[i]
print a
a=[3,7,5,8,9,1,10]
SelectSort(a)
input()
上面方法是每次选择最小的元素插在前面,还可以每次选择最大的元素插在后面。
def SelectSort(a):
n=len(a)
for i in range(n-1,0,-1):
max=i
for j in range(0,i):
if a[j]>a[max]:
max=j
a[i],a[max]=a[max],a[i]
print a
a=[3,7,5,8,9,1,10,2]
SelectSort(a)
input()
4、快速排序:
def QuickSort(a,begin,end):
b=begin
e=end
if b>=e:
return
m=a[b]
while b<e:
while b<e and a[e]>=m:
e=e-1
a[b]=a[e]
while b<e and a[b]<=m:
b=b+1
a[e]=a[b]
a[b]=m
QuickSort(a,begin,b-1)
QuickSort(a,b+1,end)
a=[5,3,8,7,2,6,9,1]
QuickSort(a,0,7)
print a
input()
经典的快速排序,用到了递归的方法,算法很经典,认真分析会有很大的收获的。
未完待续。。。
python实现各种排序的更多相关文章
- Python实现各种排序算法的代码示例总结
Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...
- Python的列表排序
Python的列表排序 本文为转载,源地址为:http://blog.csdn.net/horin153/article/details/7076321 在 Python 中, 当需要对一个 list ...
- Python复杂多重排序
1. cmp函数是python自带的函数,用于比较两个参数哪个大哪个小 print cmp(2, 3) # -1 如果第一个参数比第二个小,就返回-1,两个元素相等,返回0,否则返回1 2.所以就可以 ...
- 飘逸的python - 多条件排序及itemgetter的应用
曾经客户端的同事用as写一大堆代码来排序,在得知python排序往往只需要一行,惊讶无比,遂对python产生浓厚的兴趣. 之前在做足球的积分榜的时候需要用到多条件排序,如果积分相同,则按净胜球,再相 ...
- Python 冒泡法排序
def sequence(disorder='', separators=''): arrays = disorder.split(separators) def desc(): for i in r ...
- Python实现常用排序算法
Python实现常用排序算法 冒泡排序 思路: 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完 ...
- 深入Python(1): 字典排序 关于sort()、reversed()、sorted()
http://www.cnblogs.com/BeginMan/p/3193081.html 一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠 ...
- python的常见排序
在python程序中,我们往往自始至终都在与序列(列表.字典.元组)打交道,而最常用的操作就是对序列排序了.在此简单总结一下python中的排序. 基本排序方法 在python中,list对象具有 s ...
- python中字典排序,列表中的字典排序
python中字典排序,列表中的字典排序 一.使用python模块:operator import operator #首先要导入模块operator x = {1:2, 3:4, 4:3, 2:1, ...
- Python Dataframe 分组排序和 Modin
Python Dataframe 分组排序和 Modin 1.按照其中一列进行排序 在dataframe中,按照其中的一列排序:比如q值倒排 (1)rank方法 data['new_rank'] = ...
随机推荐
- 【实例分割】PANet简单笔记
PANet是18年的一篇CVPR,作者来自港中文,北大,商汤与腾讯优图,PANET可看作Mask-RCNN+,是在Mask-RCNN基础上做的几处改进. 论文地址:https://arxiv.org/ ...
- SprimgMVC学习笔记(九)—— RESTful支持
一.什么是restful? Restful就是一个资源定位及资源操作的风格,其核心是面向资源.不是标准也不是协议,只是一种风格.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制.RES ...
- Nginx 基本 安装..
ubuntu 下 Nginx是高度自由化的Web服务器,它的功能是由许多模块来支持.如果使用了某个模块,这个模块使用了一些类似zlib或OpenSSL等的第三方库,那么就必须先安装这些软件.Ubunt ...
- stringstream的用法
stringstream的基本用法 stringstream是字符串流.它将流与存储在内存中的string对象绑定起来. 在多种数据类型之间实现自动格式化. 1.stringstream对象的使用 # ...
- 2015苏州大学ACM-ICPC集训队选拔赛(1) 1007
连通图 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submissio ...
- python基础之1--Python入门
第1章 Python生态圈 第2章 编程与编程语言 python是一门编程语言,作为学习python的开始,需要事先搞明白:编程的目的是什么?什么是编程语言?什么是编程? 2.1 编程的目的: 计算机 ...
- Java高级工程师应该掌握的东东
今天偶然看了膜拜单车官网对java程序员的招聘要求,如下,可以对照发现自己的不足 职责 负责APP SERVER中间层等模块开发 完成各类需求开发任务,同时保证服务稳定性.茁壮性 要求 精通Java语 ...
- Java升级替换java version "1.5.0"
首先进行java安装 http://www.cnblogs.com/someone9/p/8670585.html 2. 然后查看版本信息,仍然是1.5.0 [root@OKC java]# java ...
- .NET接收邮件下载邮件附件——openpop.net
使用OpenPop.Net接收邮件很方便,下面是接收下载邮件附件的代码 OpenPop.Net下载地址 https://sourceforge.net/projects/hpop/ public cl ...
- 015 3Sum 三个数的和为目标数字
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...