1、冒泡排序:

  1. # -*- coding: utf-8 -*-
  2. def BubbleSort(a):
  3. n=len(a)
  4. for i in range(0,n-1):
  5. swapped=False
  6. for j in range(0,n-i-1):
  7. if a[j]>a[j+1]:
  8. a[j],a[j+1]=a[j+1],a[j]
  9. swapped=True
  10. if not swapped: break
  11. print a
  12. a=[10,8,3,2,4,6,9]
  13. BubbleSort(a)
  14. 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. 1 # -*- coding: utf-8 -*-
  2. 2 def BubbleSort(a):
  3. 3 n=len(a)
  4. 4 for i in range(0,n-1):
  5. 5 for j in range(n-1,i,-1):
  6. 6 if a[j]<a[j-1]:
  7. 7 a[j],a[j-1]=a[j-1],a[j]
  8. 8 print a
  9. 9 a=[10,8,3,2,4,6,9]
  10. 10 BubbleSort(a)
  11. 11 input()

注意一点,range(0,n)和range(n,0,-1),都是左边的值能取到,如range(0,10)得到0-9这10个数,range(10,0,-1)得到10-1这10个数,这与数组的下标要对应好。

2、插入排序:

  1. def InsertSort(a):
  2. n=len(a)
  3. for i in range(1,n):
  4. for j in range(i,0,-1):
  5. if a[j]<a[j-1]:
  6. a[j],a[j-1]=a[j-1],a[j]
  7. else: break
  8. print a
  9. a=[3,7,5,8,9,1,10]
  10. InsertSort(a)
  11. input()

这种方法是如果满足条件每次都交换前后两个值,感觉效率不是很高。

另一种方式:

  1. def InsertSort(a):
  2. n=len(a)
  3. for i in range(1,n):
  4. k=a[i]
  5. j=i-1
  6. while j>=0 and a[j]>k:
  7. a[j+1]=a[j]
  8. j=j-1
  9. a[j+1]=k
  10. print a
  11. a=[3,7,5,8,9,1,10]
  12. InsertSort(a)
  13. input()

插入排序的改进版,希尔排序:

  1. def ShellSort(a):
  2. n=len(a)
  3. span=n/2
  4. while span>=1:
  5. for i in range(span,n):
  6. k=a[i]
  7. j=i-span
  8. while j>=0 and a[j]>k:
  9. a[j+span]=a[j]
  10. j=j-span
  11. a[j+span]=k
  12. span=span/2
  13. print a
  14. a=[3,7,5,8,9,1,10]
  15. ShellSort(a)
  16. input()

3、选择排序:

  1. def SelectSort(a):
  2. n=len(a)
  3. for i in range(0,n-1):
  4. min=i
  5. for j in range(i+1,n):
  6. if a[j]<a[min]:
  7. min=j
  8. a[i],a[min]=a[min],a[i]
  9. print a
  10. a=[3,7,5,8,9,1,10]
  11. SelectSort(a)
  12. input()

上面方法是每次选择最小的元素插在前面,还可以每次选择最大的元素插在后面。

  1. def SelectSort(a):
  2. n=len(a)
  3. for i in range(n-1,0,-1):
  4. max=i
  5. for j in range(0,i):
  6. if a[j]>a[max]:
  7. max=j
  8. a[i],a[max]=a[max],a[i]
  9. print a
  10. a=[3,7,5,8,9,1,10,2]
  11. SelectSort(a)
  12. input()

4、快速排序:

  1. def QuickSort(a,begin,end):
  2. b=begin
  3. e=end
  4. if b>=e:
  5. return
  6. m=a[b]
  7. while b<e:
  8. while b<e and a[e]>=m:
  9. e=e-1
  10. a[b]=a[e]
  11. while b<e and a[b]<=m:
  12. b=b+1
  13. a[e]=a[b]
  14. a[b]=m
  15. QuickSort(a,begin,b-1)
  16. QuickSort(a,b+1,end)
  17. a=[5,3,8,7,2,6,9,1]
  18. QuickSort(a,0,7)
  19. print a
  20. input()

经典的快速排序,用到了递归的方法,算法很经典,认真分析会有很大的收获的。

未完待续。。。

python实现各种排序的更多相关文章

  1. Python实现各种排序算法的代码示例总结

    Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...

  2. Python的列表排序

    Python的列表排序 本文为转载,源地址为:http://blog.csdn.net/horin153/article/details/7076321 在 Python 中, 当需要对一个 list ...

  3. Python复杂多重排序

    1. cmp函数是python自带的函数,用于比较两个参数哪个大哪个小 print cmp(2, 3) # -1 如果第一个参数比第二个小,就返回-1,两个元素相等,返回0,否则返回1 2.所以就可以 ...

  4. 飘逸的python - 多条件排序及itemgetter的应用

    曾经客户端的同事用as写一大堆代码来排序,在得知python排序往往只需要一行,惊讶无比,遂对python产生浓厚的兴趣. 之前在做足球的积分榜的时候需要用到多条件排序,如果积分相同,则按净胜球,再相 ...

  5. Python 冒泡法排序

    def sequence(disorder='', separators=''): arrays = disorder.split(separators) def desc(): for i in r ...

  6. Python实现常用排序算法

    Python实现常用排序算法 冒泡排序 思路: 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完 ...

  7. 深入Python(1): 字典排序 关于sort()、reversed()、sorted()

    http://www.cnblogs.com/BeginMan/p/3193081.html 一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠 ...

  8. python的常见排序

    在python程序中,我们往往自始至终都在与序列(列表.字典.元组)打交道,而最常用的操作就是对序列排序了.在此简单总结一下python中的排序. 基本排序方法 在python中,list对象具有 s ...

  9. python中字典排序,列表中的字典排序

    python中字典排序,列表中的字典排序 一.使用python模块:operator import operator #首先要导入模块operator x = {1:2, 3:4, 4:3, 2:1, ...

  10. Python Dataframe 分组排序和 Modin

    Python Dataframe 分组排序和 Modin 1.按照其中一列进行排序 在dataframe中,按照其中的一列排序:比如q值倒排 (1)rank方法 data['new_rank'] = ...

随机推荐

  1. Jenkins利用官网上的rpm源安装

    官网网址:https://pkg.jenkins.io/redhat/                (官网上有安装的命令,参考网址) 安装jdk yum install -y java-1.8.0- ...

  2. HTTP协议和WebSocket协议(一)

    转自:https://www.jianshu.com/p/0e5b946880b4# HTTP HTTP的地址格式如下: http_URL = "http:" "//&q ...

  3. pytorch 加载mnist数据集报错not gzip file

    利用pytorch加载mnist数据集的代码如下 import torchvision import torchvision.transforms as transforms from torch.u ...

  4. SprimgMVC学习笔记(八)—— SpringMVC与前台json数据交互

    一.两种交互形式 可以看出,前台传过来的方式有两种,一种是传json格式的数据过来,另一种就是在url的末尾传普通的key/value串过来,针对这两种方式,在Controller类中会有不同的解析, ...

  5. Django 09 博客小案例

    Django 09 博客小案例 urls.py from django.urls import path from . import views urlpatterns = [ path('index ...

  6. NowCoder数列(矩阵快速幂变式)

    时间限制 3000 ms 内存限制 32768 KB 代码长度限制 100 KB 题目描述 NowCoder最近在研究一个数列: * F(0) = 7 * F(1) = 11 * F(n) = F(n ...

  7. Java的观察者

    class Teacher extends Observable { public void startLesson() { System.out.println(String.format(&quo ...

  8. Tomcat分析-启动过程

    Server是Tomcat最顶层的容器 Service用于提供服务 Connector用于处理连接相关的事情,并提供Socket与request和response的转换 Container用于封装和管 ...

  9. sshd_config注释

    [root@H0f ~]# cat /etc/ssh/sshd_config #update by H0f -- # $OpenBSD: sshd_config,v // :: djm Exp $ # ...

  10. vue-cli构建项目添加网站ico的logo

    1.网上找一个把图片改成ico格式的网站,把logo改成ico格式,命名favicon.ico 2.将favicon.ico放入static目录 3.在index.html文件中引入 <link ...