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. 关于二分查找 使用 lower_bound

    在寻找单调递增最长自序列 , 的时候能不能确认出来哪个是单调递增最长自序列  ?  我的想法是 if(location>=num) dp[location]=b; 这样的 , 基于http:// ...

  2. DropDownList 数据源绑定和获取

    前台代码: <td>账户名称:</td> <td> <asp:DropDownList ID="DropDownListAccount" ...

  3. Django总结三

    回顾: - 装饰器 模板 - def wrapper(func): def inner(*args, **args): 执行被执行函数之前的操作 res = func(*args, **args) 执 ...

  4. ACM_水题你要信了(修改版)

    水题你要信了 Time Limit: 2000/1000ms (Java/Others) Problem Description: 某发最近又认识了很多妹(han)子,可是妹(han)子一多不免有时会 ...

  5. 7CSS之超链接

    <!-- title="这是鼠标悬停时显示的文字" 鼠标悬停时,显示相关的文字--> <a href="#" title="这是鼠标 ...

  6. 【转】Linux下变量内容删除与替换

    转自:http://www.linuxidc.com/Linux/2015-01/111781.htm 当一个变量被赋予值后,有时会对变量的值进行一些微小的调整,比如删除变量值中特定一部份,或替换掉一 ...

  7. mybatis or

    这两天项目用到mybatis,碰到and or的联合查询,语句像这样的 select * from table where xxx = "xxx" and (xx1="x ...

  8. 12 C#中的方法

    还记得我们的第一个程序吗?忘记了?那你要努力了.我们的第一个程序是就是往dos窗口输出一些字符串.在哪个程序中只有一个方法,Main方法.Main方法是一个特殊的方法,但是它也是一个方法.为什么说Ma ...

  9. conda python虚拟环境

    #查看已安装的python包 conda list #查看当前有哪些虚拟环境 conda env list 或者 conda info -e #更新conda conda update conda # ...

  10. canvas烟花锦集

    canvas可以实现不同动画效果,本文主要记录几种不同节日烟花效果实现. 实现一 效果地址 html <canvas id="canvas"></canvas&g ...