------------------希尔排序-------------

一直没搞懂希尔排序怎么搞得

def Shell_sort(L):
step = len(L)/2
while step > 0:
for i in range(step,len(L)): #在索引为step到len(L)上,比较L[i]和L[i-step]的大小
while(i >= step and L[i] < L[i-step]): #这里可以调整step从小到大或者从大到小排列
L[i],L[i-step] = L[i-step],L[i]
i -= step
step /= 2
print L
Shell_sort(L)

------------------插入排序-------------

一个有序数列,一个无序数列,遍历无序数列,把数据插入到有序数列的相应位置

def insertion_sort(A):
length=len(A)
for i in range(1,length):
key=A[i]
j=i-1
while j>0 and A[j]>key:
A[j+1]=A[j]
j=j-1
A[j+1]=key
return A

------------------冒泡排序-------------

比较相邻的两个元素,保证每次遍历到最后的元素是最大的

def bubble_sort(A):
length=len(A)
for i in range(length-1):
for j in range(length-i-1):
if A[j]>A[j+1]:
A[j],A[j+1]=A[j+1],A[j]
return A

------------------选择排序-------------

从未排序的数列中找到最小的元素放在起始位置

def selection_sort(A):
length=len(A)
for i in range(length):
min_=i
for j in range(i+1,length):
if A[j]<A[min_]:
min_=j
A[i],A[min_]=A[min_],A[i]
return A

------------------快速排序-------------

一个元素作为基准,比基准数大的放右边,小的放左边,再对左右区间递归

def quik_sort(A):
def qsort(A,left,right):
if left>right:
return A
l=left
r=right
key=A[l]
while l<r:
while A[r]>=key and l<r:
r-=1
while A[l]<=key and l<r:
l+=1
A[l],A[r]=A[r],A[l]
A[left],A[l]=A[l],A[left]
qsort(A,left,l-1)
qsort(A,r+1,right)
return A
return qsort(A,0,len(A)-1)

------------------归并排序-------------

递归分解数组,再合并

def MergeSort(lists):
if len(lists) <= 1:
return lists
num = int( len(lists) / 2 )
left = MergeSort(lists[:num])
right = MergeSort(lists[num:])
return Merge(left, right)
def Merge(left,right):
r, l=0, 0
result=[]
while l<len(left) and r<len(right):
if left[l] < right[r]:
result.append(left[l])
l += 1
else:
result.append(right[r])
r += 1
result += left[l:]
result += right[r:]
return result

------------------堆排序-------------

将无序列表看成二叉树,每次调整二叉树成为最大堆,即根节点是最大的元素,然后把根节点和最后一个元素互换,递归调整剩余元素

#建堆
def build_max_heap(A):
lastnode=math.floor((len(A))/2-1)
for i in range(lastnode,-1,-1):
max_heapify(A,i)
return A #维护最大堆
def max_heapify(A,i):
length=len(A)
max_index=i
if (2*i+1)<length:
left=2*i+1
if A[left]>A[i]:
max_index=left
if (2*i+2)<length:
right=2*i+2
if A[right]>A[max_index]:
max_index=right
if max_index!=i:
A[max_index],A[i]=A[i],A[max_index]
max_heapify(A,max_index)
return A #堆排序
def heapsort(A):
length=len(A)
A=build_max_heap(A)
for i in range(length-1,-1,-1):
A[0],A[i]=A[i],A[0]
A[:i]=max_heapify(A[:i],0)
return A

python排序算法总结和实现的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. Python排序算法

    不觉已经有半年没写了,时间真是容易荒废,这半年过了个春节,去拉萨旅行.本职工作也很忙,没有开展系统的学习和总结. 今年开始静下心来从基础开始学习,主要分为三部分,算法.线性代数.概率统计. 首先学习算 ...

  7. Python排序算法——冒泡排序

    有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10786904.html 一.冒泡排序(Bubb ...

  8. Python排序算法——插入排序

    有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10787464.html 一.插入排序(Inse ...

  9. Python排序算法——选择排序

    有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10787340.html 一.选择排序(Sele ...

  10. Python排序算法——快速排序

    有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10768593.html 排序算法(Sortin ...

随机推荐

  1. 总结java创建文件夹的4种方法及其优缺点-JAVA IO基础总结第三篇

    本文是Java IO总结系列篇的第3篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  2. Python数据清洗:提取爬虫文本中的电话号码

    步骤索引 效果展示 注意事项 代码 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识. ...

  3. PHP to .NET Compiler

    官网 https://github.com/peachpiecompiler/peachpie 非官方简介 https://blog.csdn.net/sD7O95O/article/details/ ...

  4. 类文件的结构、JVM 的类加载过程、类加载机制、类加载器、双亲委派模型

    一.类文件的结构 我们都知道,各种不同平台的虚拟机,都支持 "字节码 Byte Code" 这种程序存储格式,这构成了 Java 平台无关性的基石.甚至现在平台无关性也开始演变出 ...

  5. mock之初体验

    刚接触vue的时候,看到github上有人的开源项目介绍使用mock可以模拟接口调用,可以使用模拟数据避免跟后端交互也可以实现前端功能的完美展现,当时觉得卧槽,mock这个东西这么神奇的吗?那一定要学 ...

  6. Template DB MySQL学习总结

    Zabbix 5.0下如何应用Template DB MySQL来监控MySQL数据库呢?下面简单整理一下如何配置.应用Zabbix下自带的模板Template DB MySQL.其实非常简单. Te ...

  7. 20190923-07Linux搜索查找类 000 015

    find 查找文件或者目录 find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端. 1.基本语法 find [搜索范围] [选项] 2.选项说明 表1-27 选项 功能 -n ...

  8. 局域网内笔记本分屏到android手机上

    前提 笔记本电脑1台 安卓/ios手机1部 局域网 spacedesk 预览 参考: https://www.appinn.com/spacedesk https://spacedesk.net/de ...

  9. CSS3 RGBA 属性高级用法

    这个属性的兼容问题比较简单,IE8已经支持这个属性,IE6和IE7也可以通过hack支持.RGBA和CSS2里的RBG属性差不多,只是RGBA属性多了一个透明度的定义,CSS3标准里对RGBA属性的解 ...

  10. springBoot 使用webSocket

    本文(2019年6月18日 飞快的蜗牛博客) 有许多人走着走着,就迷失了自己,所以不论发生了什么,有时候抱着自己去静下来想想,要好好的对待自己:"钱塘江上潮信来,今日方知我是我", ...