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)的更多相关文章

  1. (2)Java数据结构--二叉树 -和排序算法实现

    === 注释:此人博客对很多个数据结构类都有讲解-并加以实例 Java API —— ArrayList类 & Vector类 & LinkList类Java API —— BigDe ...

  2. 算法和数据结构~各位排序算法的介绍与实现(C#)

    排序是指将元素集合按照规定的顺序排列.通常有两种排序方法,升序排列和降序排列.例如,对整数集{5,2,7,1}进行升序排列,结果为{1,2,5,7},对其进行降序排列结果为{7,5,2,1}.总的来说 ...

  3. 数据结构与算法---排序算法(Sort Algorithm)

    排序算法的介绍 排序也称排序算法 (Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类 1) 内部排序: 指将需要处理的所有数据都加载 到内部存储器(内存)中进 ...

  4. java数据结构之常用排序算法

    冒泡排序 private void maopao(int arr[]) { for (int i = 0; i < arr.length; i++) { for (int j = 0; j &l ...

  5. python 经典排序算法

    python 经典排序算法 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.常见的内部排序算 ...

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

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

  7. python3实现几种常见的排序算法

    python3实现几种常见的排序算法 冒泡排序 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要 ...

  8. Java实现八种排序算法(代码详细解释)

    经过一个多星期的学习.收集.整理,又对数据结构的八大排序算法进行了一个回顾,在测试过程中也遇到了很多问题,解决了很多问题.代码全都是经过小弟运行的,如果有问题,希望能给小弟提出来,共同进步. 参考:数 ...

  9. 经典排序算法(PHP)

    1.冒泡算法,排序算法,由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序 function maopao_fun($array){ $count = count($arr ...

随机推荐

  1. [Swift通天遁地]三、手势与图表-(8)制作股市中常用的蜡烛图表

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  2. Elasticsearch创建文档,利用Kibana进行创建文档

    首先先来了解一下什么是文档,es里边的文档相当于mysql数据库里边的一张表,如果你用过mongodb的话,那么肯定对es这种数据格式一定很了解了.接下来我们来看一下如何创建一个文档. PUT /sd ...

  3. NetCore Netty 框架 BT.Netty.RPC 系列随讲 二 WHO AM I 之 NETTY/NETTY 与 网络通讯 IO 模型之关系?

    一:NETTY 是什么? Netty 是什么?  这个问题其实百度上一搜一堆. 这是官方话的描述:Netty 是一个基于NIO的客户.服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个 ...

  4. jQuery Tmpl使用

    1.引入脚本 2.编写模板 2.1假设此时有一个,从后台一json格式发送来的数据 [{"tId":1,"tName":"张三"," ...

  5. Raspberry Pi开发之旅-空气温湿度检测(DHT11)

    一.首先,简单介绍下DHT11: DHT11是一个温湿度传感器,分为3个接口,分别为:VCC, DATA, GND  引脚号 名称 类型 说明 1 VCC 电源 +级,输入3V-5.5V 2 DATA ...

  6. css3背景渐变色代码

    从上到下 #grad {  background: -webkit-linear-gradient(red, blue);  background: -o-linear-gradient(red, b ...

  7. java攻城师之路--复习java web之servlet

    需要掌握的知识点:1.Servlet程序编写 ----- 生命周期2.ServletAPI Request Response 3.Cookie 和 Session Servlet 用来 动态web资源 ...

  8. 拍拍贷投资工具|拍拍贷投标工具|PPD投标工具|PPD投资工具介绍

    我们先来分析一下现在市场上在PPD投资的途径: 其他解决方案 1.在网站或者手机客户端手动投标 这种方法对于非常小额的资金是可以的,稍微多一点就会发现不可行,目前PPD手动刷新出来的标几乎都是你刚刷新 ...

  9. python读取单个文件操作

    python读取单个文件,参考<笨方法学python>的第15节. 运行方式是采用:python python文件名 要读取的文件名 代码中 script, filename = argv ...

  10. JS中for循环多个变量的判断原理

    看完下面两个例子的比较就明白了,其实就是逗号表达式,总是依据最后一个表达式的值. for(i=0, j=0; i<10, j<6; i++, j++){ k = i + j; consol ...