从学校毕业出来后只知道冒泡排序,发现自己对排序的了解还是很浅显。

于是在网上搜索各种排序方法,以下是本人根据索搜出来的资料再结合自己理解作出的一些简单的阐述。

如果有不正确的地方欢迎大家指正。(共同学习,共同进步)

1、插入排序:最优为O(n),最坏为O(n^2),平均O(n^2)
(1)始终定义第一个元素为有序的,将剩余元素逐个插入到这个有序列中。
(2)插入过程中,将需要插入的元素与有序列中的元素逐个比较,插入到适当位置
python:

def InserSort(lists):
count = len(lists)
for i in range(1,count):
key = lists[i] #需要插入的元素
index = i #记录插入的位置
while index>0 and lists[index-1]>key:
#逐个比较,若小于前一个数则将该元素向前移动位置
lists[index] = lists[index-1]
index -= 1
#将需要插入的元素,插入指定位置
lists[index] = key
return lists

2、冒泡排序:最优为O(n),最坏为O(n^2),平均O(n^2)

(1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。
(2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
(3)针对所有的元素重复以上的步骤,除了最后一个。
(4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
python:

def BubbleSort(lists):
count = len(lists)
for i in range(count):
for j in range(count-i-1):
if lists[j] > lists[j+1]:
lists[j],lists[j+1]=lists[j+1],lists[j] #前后替换
return lists

3、希尔排序:(实质上是分组插入排序)
(1)取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中
(2)各组内进行直接插入排序
(3)取第二个增量d2<d1重复上述的分组和排序,直至所取的增量 =1,即所有记录放在同一组中进行直接插入排序为止。

def ShellSort(lists):
count = len(lists)
group = count // 2
while group>0:
for i in xrange(count):
index =i
j = i+1
while j<count:
if lists[j]<lists[index]:
index = j
j += group
if index != j:
lists[index],lists[i]=lists[i],lists[index]
group = group //2
return lists

4、快速排序:最有O(NlogN)
(1)设置两个变量i,j,排序开始的时候i=0,j=n-1。
(2)以数组第一个元素作为基数,key=A[0]。
(3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于或者等于key的值。
(4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于或者等于key的值。
(5)将第3步和第4步找到的数互换位置。
(6)重复3、4、5步骤, 直到i==j,将基数与A[i]互换。此时与A[i]为界分为两个区。
(7)将两个区重复3、4、5、6步骤

python

def  quickSort(lists,left,right):
if left >= right:
return lists
#设置基数
key = lists[left]
i = left
j = right
while i < j:
#从列表右边开始找比基数小或者相等的数
while i < j and lists[j] >= key:
j = j--
#从列表左边开始找比基数大或者等于的数
while i < j and lists[i] <= key:
i = i++
if i < j:
lists[i],lists[j]=lists[j],lists[i]
#做完第一轮比较,列表分成2个去,并且i=j,将这个数设置回基数
lists[left] = lists[i]
lists[i] = key
#递归前后半区 重复上述操作
quickSort(lists,left,i-1)
quickSort(lists,j+1,right)
return lists

5、箱排序:O(m+n)
(1)设置若干个箱子,依次扫描待排序的记录R[0],R[1],…,R[n-1]
(2)把关键字等于k的记录全都装入到第k个箱子里(分配)
(3)然后按序号依次将各非空的箱子首尾连接起来(收集)。
python

def  barrelSort(lists):
#选择一个最大的数
maxnum=max(lists)
#创建一个元素全是0的列表,作为箱
bucket = [0]*(maxnum+1)
#把所有元素放入箱中,对应元素个数加1
for i in lists:
bucket[i] +=1
#存储排序好的元素
sort_lists=[]
#取出箱中的元素
for j in range(len(bucket)):
if bucket[j] != 0:
for n in range(bucket[j]):
sort_lists.append(j)
return sort_lists

python——排序的更多相关文章

  1. python排序之二冒泡排序法

    python排序之二冒泡排序法 如果你理解之前的插入排序法那冒泡排序法就很容易理解,冒泡排序是两个两个以向后位移的方式比较大小在互换的过程好了不多了先上代码吧如下: 首先还是一个无序列表lis,老规矩 ...

  2. python排序之一插入排序

    python排序之一插入排序 首先什么是插入排序,个人理解就是拿队列中的一个元素与其之前的元素一一做比较交根据大小换位置的过程好了我们先来看看代码 首先就是一个无序的列表先打印它好让排序后有对比效果, ...

  3. 用 Python 排序数据的多种方法

    用 Python 排序数据的多种方法 目录 [Python HOWTOs系列]排序 Python 列表有内置就地排序的方法 list.sort(),此外还有一个内置的 sorted() 函数将一个可迭 ...

  4. python排序算法实现(冒泡、选择、插入)

    python排序算法实现(冒泡.选择.插入) python 从小到大排序 1.冒泡排序: O(n2) s=[3,4,2,5,1,9] #count = 0 for i in range(len(s)) ...

  5. Python排序算法之选择排序定义与用法示例

    Python排序算法之选择排序定义与用法示例 这篇文章主要介绍了Python排序算法之选择排序定义与用法,简单描述了选择排序的功能.原理,并结合实例形式分析了Python定义与使用选择排序的相关操作技 ...

  6. 44.python排序算法(冒泡+选择)

    一,冒泡排序: 是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个,如果他们的排序错误就把他们交换过来. 冒泡排序是稳定的(所谓稳定性就是两个相同的元素不会交换位置) 冒泡排序算法的运作如下 ...

  7. Python排序搜索基本算法之归并排序实例分析

    Python排序搜索基本算法之归并排序实例分析 本文实例讲述了Python排序搜索基本算法之归并排序.分享给大家供大家参考,具体如下: 归并排序最令人兴奋的特点是:不论输入是什么样的,它对N个元素的序 ...

  8. python 排序算法总结及实例详解

    python 排序算法总结及实例详解 这篇文章主要介绍了python排序算法总结及实例详解的相关资料,需要的朋友可以参考下 总结了一下常见集中排序的算法 排序算法总结及实例详解"> 归 ...

  9. Python排序函数用法

    Python排序函数完美体现了Python语言的简洁性,对于List对象,我们可以直接调用sort()函数(这里称为"方法"更合适)来进行排序,而对于其他可迭代对象(如set,di ...

  10. 带你掌握4种Python 排序算法

    摘要:在编程里,排序是一个重要算法,它可以帮助我们更快.更容易地定位数据.在这篇文章中,我们将使用排序算法分类器对我们的数组进行排序,了解它们是如何工作的. 本文分享自华为云社区<Python ...

随机推荐

  1. War(最短路+最大流)

    War http://acm.hdu.edu.cn/showproblem.php?pid=3599 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  2. 零基础学习hadoop到上手工作线路指导(中级篇)

    此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结. 五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解: hadoop分为h ...

  3. Spring框架之什么是IOC的功能?

    1. 什么是IOC的功能? * IoC -- Inverse of Control,控制反转,将对象的创建权反转给Spring!! * 使用IOC可以解决的程序耦合性高的问题!!  

  4. C#通过反射获得对象所有属性和值

    C#获得对象的所有属性和值 public void GetPros() { UserInfo userInfo = new UserInfo(); userInfo.ID = ; userInfo.N ...

  5. IIS 6.0/7.0/7.5、Nginx、Apache 等服务器解析漏洞总结

    IIS 6.0 1.目录解析:/xx.asp/xx.jpg  xx.jpg可替换为任意文本文件(e.g. xx.txt),文本内容为后门代码 IIS6.0 会将 xx.jpg 解析为 asp 文件. ...

  6. How to use jQuery countdown plugin

    Install We provide two installation methods: Bower bower install jquery.countdown Manual Download th ...

  7. Java 8 Stream API

    Java 8 Stream API JDK8 中有两大最为重要的改变.第一个是 Lambda 式:另外 Stream API(java.util.stream.*) Stream 是 JDK8 中处理 ...

  8. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  9. Quartz教程三:Job与JobDetail介绍

    Quartz教程三:Job与JobDetail介绍 原文链接 | 译文链接 | 翻译:nkcoder | 校对: 本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感 ...

  10. Devexpress VCL Build v2013 vol 13.2.4 发布

    不说了,自己看吧. What's New in 13.2.4 (VCL Product Line)   New Major Features in 13.2 What's New in VCL Pro ...