#冒泡排序,主要思想:从第一个元素开始,向尾部开始比较大小换位置
def bubble_sort(alist):
for j in range(len(alist)-1,0,-1):
for i in range(j):
if alist[i] > alist[i+1]:
alist[i],alist[i+1] = alist[i+1],alist[1] #选择排序,主要思想:第一个数开始和后面比大小,遇到小的就换到第一个,继续和刚刚换数位之后的数比大小,小就再换,直到最后一个数,如何从第二个数开始重复刚刚的过程
def selection_sort(alist):
for i in range(n-1):
min_index = i
for j in range(i + 1,n):
if alist[j] < alist[min_index]:
min_index = j
if min_index != i:
alist[i],alist[min_index] = alist[min_index],alist[i] #插入排序,主要思想:从数列后往前进行比较,如果后面的数比前面的数小,就换位置,换到大于前面数为止
def insert_sort(alist):
for i in range(1,len(alist)):
for j in range(i,0,-1):
if alist[j] < alist[j-1]:
alist[j],alist[j-1] = alist[j-1],alist[j] #快速排序,主要思想:第一个元素作为基准元素,第二个与最后一个元素与第一个元素比较大小,比第一个大的元素放右边,小的放左边,
# 循环完后两个游标重合的位置就是基准元素在整个数列中的顺序位置,此时基准元素左边的都比它小,右边的都比它大,左边与右边再重复以上操作。
def quick_sort(alist,start,end):
if start >= end:
#递归退出的条件
return
mid = alist[start]
#设定起始元素为要寻找位置的基准元素
low = start
#low为序列左边的由左向右移动的游标
high = end
#high为序列右边由右向左移动的游标
while low < high:
#如果low与high未重合,high指向的元素不比基准元素小,则high向左移动
while low < high and alist[high] >= mid:
high -= 1
alist[low] = alist[high]
#将high指向的元素放到low的位置上
while low < high and alist[low] < mid:
#如果low与high未重合,low指向的元素比基准元素小,则low向右移动
low += 1
alist[high] = alist[low]
#将low指向的元素放到high上
alist[low] = mid
#退出后,low与high重合,此时所指的位置为基准元素的正确位置
#将基准元素放到该位置
quick_sort(alist,start,low-1)
#对基准元素左边的子序列进行快速排序
quick_sort(alist,low+1,end)
#对基准元素右边的子序列进行快速排序 #希尔排序,主要思想:分割列表,gap就是分割后小列表的长度,各个列表对应位置比较大小然后交换。
def shell_sort(alist):
n = len(alist)
# 初始步长
gap = n / 2
while gap > 0:
# 按步长进行插入排序
for i in range(gap, n):
j = i
# 插入排序
while j >= gap and alist[j - gap] > alist[j]:
alist[j - gap], alist[j] = alist[j], alist[j - gap]
j -= gap
# 得到新的步长
gap = gap / 2 #归并排序,主要思想:将一个数列分解成对应长度n的n个数列,两两一组,比大小,小的在前合并,然后在两两合并,先比较两个数组的第一位,小的在前,再将未排序数列的第一位与已排序的第二位比较,小的在前,比完排序为止;重复之前的操作,直到变成一个数组
def merge_sort(alist):
if len(alist) <= 1:
return alist
# 二分分解
num = len(alist)/2
left = merge_sort(alist[:num])
right = merge_sort(alist[num:])
# 合并
return merge(left,right) def merge(left, right):
#合并操作,将两个有序数组left[]和right[]合并成一个大的有序数组
#left与right的下标指针
l, r = 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

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 ...

随机推荐

  1. 多线程篇七:通过Callable和Future获取线程池中单个务完成后的结果

    使用场景:如果需要拿到线程的结果,或者在线程完成后做其他操作,可以使用Callable 和 Futrue 1.定义一个线程池,向线程池中提交单个callable任务 ExecutorService t ...

  2. Scrum之初体验

    一.前言 入职两个月,作为新人,没有参加过一次早晨的scrum会议. 最大的感触就是,有一天中午,带我的开发哥哥突然说产品今天下午提测,我突然就懵了. 这算是我体会的最大的团队中人没有参加scrum, ...

  3. 【数据库】2.0 MySQL入门学习(二)——如何获得MySQL以及MySQL安装

    1.0 如何获得MySQL: www.oracle.com https://dev.mysql.com/downloads/ 2.0 例如进入Oracle官网,找到MySQL: 进入页面后,切换到“资 ...

  4. webstorm上传vue代码至git

    Git在push时候,提示:push to origin/master was rejected 解决方案如下: 提交代码顺序 webstorm右键项目名称==>Git==>Commit ...

  5. 讲座: conversation

    一, Zhouming MSRA NLP group NLP 2.0 attention model 二,Yan Rui 一, retrived based-conversation system t ...

  6. 【Leetcode】【Easy】Valid Palindrome

    Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...

  7. Profinet网络的RT/IRT容量

    轴数很多的时候,还考虑过PROFINET最大IRT容量的问题. [1]每个Profinet网络的RT个数, simition D 64 CPU 1511/1513-1 128 CPU 1515-2/1 ...

  8. 如何删除Windows 10中的内存转储文件

    内存转储文件是由Windows产生的.以下情况下可能产生内存转储文件: 计算机崩溃蓝屏 内存错误 硬件问题 内存转储文件包含计算机系统崩溃时的详细的参数副本.用于帮助识别导致系统崩溃的原因.Windo ...

  9. 下学期第三次作业——SQA计划和验收测试规程设计

    一.SQA计划 1.目的 在做云医院这个项目中,严格遵循SQA的计划,确保软件的质量的到保证 2.范围 随着项目的进行,不断的去改变计划,在项目开发的整个生命周期内. 3.人员分工 姓名 角色 开始时 ...

  10. ART_20190430

    Algorithm-算法题 第一个只出现一次的字符 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要 ...