[数据结构与算法]排序算法(Python)
1、直接插入排序
给定一个数组后,从第二个元素开始,如果比第一个小,就跟他交换位置,否则不动;第三个元素如果比第二个小,把第三个跟第二个交换位置,在把第二个与第一个比较;.....
def insert_sort(arr):
length = len(arr)
for i in range(1,length):
if arr[i] < arr[i-1]:
for j in range(i-1,-1,-1):
if arr[j+1] < arr[j]:
arr[j+1],arr[j] = arr[j],arr[j+1]
return arr
时间复杂度:O(n^2).
2、希尔排序法
对数组分成几个段进行排序,拍好了以后还按原来段的下标摆放,例如

对第一趟排序下标为1的数来说,就是27跟38比哪个大,哪个就是arr[1],同理arr[0]的值49和13中的较小值
下面是对于每一趟排序的方法
def shell_insert_sort(arr,dk):
length = len(arr)
for i in range(dk,len(arr)):
if arr[i] < arr[i-dk]:
for j in range(i-dk,-1,-1):
if arr[j+dk] < arr[j]:
arr[j+dk],arr[j] = arr[j],arr[j+dk]
下面是总的方法
def shell_sort(arr):
dk = len(arr) / 2
while dk >= 1:
shell_insert_sort(arr,dk)
dk = dk / 2
其实单趟方法跟直接插入排序相比就是把1换成了dk
3、简单选择排序
在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。
就是循环数组长度,在每一位下找到这一位的下标应该是几,比如循环到1,就是第二位数,这时候如果找到下标是1那就是他自己,否则交换跟这个下标的数交换一下
下面是算出第i个位置数下标应该是多少
def select_min_index(arr,i):
min_index = i
length = len(arr)
for j in range(i + 1,length):
if arr[j] < arr[min_index]:
min_index = j
return min_index
下面是整个方法
def select_sort(arr):
for i in range(0,len(arr)):
min_index = select_min_index(arr,i)
if min_index != i:
arr[i],arr[min_index] = arr[min_index],arr[i]
简单排序算法的改进--二元选择排序
对于一元的就是对大头小头同时排序
4、冒泡排序
大的沉下去,小的飘上来~
def buble(arr):
for i in range(0,len(arr)):
for j in range(i+1,len(arr)):
if arr[i] > arr[j]:
arr[i],arr[j] = arr[j],arr[i]
print arr
5、快速排序法
1)选择一个基准元素,通常选择第一个元素或者最后一个元素,
2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大。
3)此时基准元素在其排好序后的正确位置
4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。
def kp(arr,i,j):
if i < j:
base = kpgc(arr,i,j)
kpgc(arr,i,base )
kpgc(arr,base + 1,j)
def kpgc(arr,i,j):
base = arr[i]
while i < j:
while i < j and arr[j] >= base:
j-=1
while i < j and arr[j] < base:
arr[i] = arr[j]
i += 1
arr[j] = arr[i]
arr[i] = base
return i
快排过程中,如果j的值大于等与基准值,把j往前移动,如果小于基准值,把这个值给当前最小下标i处,i指针后移一位,再把值付给j的位置
6、归并排序


[数据结构与算法]排序算法(Python)的更多相关文章
- (2)Java数据结构--二叉树 -和排序算法实现
=== 注释:此人博客对很多个数据结构类都有讲解-并加以实例 Java API —— ArrayList类 & Vector类 & LinkList类Java API —— BigDe ...
- 算法和数据结构~各位排序算法的介绍与实现(C#)
排序是指将元素集合按照规定的顺序排列.通常有两种排序方法,升序排列和降序排列.例如,对整数集{5,2,7,1}进行升序排列,结果为{1,2,5,7},对其进行降序排列结果为{7,5,2,1}.总的来说 ...
- 数据结构与算法---排序算法(Sort Algorithm)
排序算法的介绍 排序也称排序算法 (Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类 1) 内部排序: 指将需要处理的所有数据都加载 到内部存储器(内存)中进 ...
- java数据结构之常用排序算法
冒泡排序 private void maopao(int arr[]) { for (int i = 0; i < arr.length; i++) { for (int j = 0; j &l ...
- python 经典排序算法
python 经典排序算法 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.常见的内部排序算 ...
- python 排序算法总结及实例详解
python 排序算法总结及实例详解 这篇文章主要介绍了python排序算法总结及实例详解的相关资料,需要的朋友可以参考下 总结了一下常见集中排序的算法 排序算法总结及实例详解"> 归 ...
- python3实现几种常见的排序算法
python3实现几种常见的排序算法 冒泡排序 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要 ...
- Java实现八种排序算法(代码详细解释)
经过一个多星期的学习.收集.整理,又对数据结构的八大排序算法进行了一个回顾,在测试过程中也遇到了很多问题,解决了很多问题.代码全都是经过小弟运行的,如果有问题,希望能给小弟提出来,共同进步. 参考:数 ...
- 经典排序算法(PHP)
1.冒泡算法,排序算法,由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序 function maopao_fun($array){ $count = count($arr ...
随机推荐
- Akka源码分析-ask模式
在我之前的博文中,已经介绍过要慎用Actor的ask.这里我们要分析一下ask的源码,看看它究竟是怎么实现的. 开发时,如果要使用ask方法,必须要引入akka.pattern._,这样才能使用ask ...
- 零基础如何学习Java和web前端
今天说一下零基础到底能不能学习Java,为什么有的人说学不了呢,那么接下来我为大家揭晓,零基础到底适合不适合学习Java. 零基础学习Java的途径第一个就是看视频,然后就是看书,或者在线下报个培训班 ...
- RHEL6.5安装QT5.4,设置环境变量
qt5.4.run在[/home/share]目录下 vim ~/.bashrcexport PATH=/opt/oracle/Qt5.4.1/Tools/QtCreator/bin:/opt/ora ...
- .net C# 格式化时间
1.HtmlEncode="False" 2.DataFormatString="{0:d}" C#格式化日期时间 DateTime dt = DateTime ...
- Jquery 表单基础元素操作总结
最近做前端比较多总结一些常用功能: radio 单选选中并且出发change事件: $(selector).find('input:radio[name=valuationMode]').filter ...
- Android开发中的SQLite事务处理,即beginTransaction()方法
使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTrans ...
- C#用Microsoft.Office.Interop.Word进行Word转PDF的问题
之前用Aspose.Word进行Word转PDF发现'\'这个字符会被转换成'¥'这样的错误,没办法只能换个方法了.下面是Microsoft.Office.Interop.Word转PDF的方法: p ...
- node or gulp 使用
##MAC 升级node.js的方法 ###第一步,先查看本机node.js版本: $ node -v ###第二步,清除node.js的cache: $ sudo npm cache clean - ...
- react杂记
React webpack+react (hello world) 项目结构: src: app.js main.js package.json webpack_dev_config.js 需要安装包 ...
- node.js安装步骤
首先这是node.js的官网:https://nodejs.org/en/ 截至2017年12月9日,node更新在8.9.3该版本,建议开发人员下载6.0以上版本,8以上不是很稳定! 如果有其他需 ...