python排序算法的整理
#冒泡排序,主要思想:从第一个元素开始,向尾部开始比较大小换位置
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排序算法的整理的更多相关文章
- python排序算法实现(冒泡、选择、插入)
python排序算法实现(冒泡.选择.插入) python 从小到大排序 1.冒泡排序: O(n2) s=[3,4,2,5,1,9] #count = 0 for i in range(len(s)) ...
- Python排序算法之选择排序定义与用法示例
Python排序算法之选择排序定义与用法示例 这篇文章主要介绍了Python排序算法之选择排序定义与用法,简单描述了选择排序的功能.原理,并结合实例形式分析了Python定义与使用选择排序的相关操作技 ...
- 44.python排序算法(冒泡+选择)
一,冒泡排序: 是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个,如果他们的排序错误就把他们交换过来. 冒泡排序是稳定的(所谓稳定性就是两个相同的元素不会交换位置) 冒泡排序算法的运作如下 ...
- python 排序算法总结及实例详解
python 排序算法总结及实例详解 这篇文章主要介绍了python排序算法总结及实例详解的相关资料,需要的朋友可以参考下 总结了一下常见集中排序的算法 排序算法总结及实例详解"> 归 ...
- 带你掌握4种Python 排序算法
摘要:在编程里,排序是一个重要算法,它可以帮助我们更快.更容易地定位数据.在这篇文章中,我们将使用排序算法分类器对我们的数组进行排序,了解它们是如何工作的. 本文分享自华为云社区<Python ...
- Python排序算法
不觉已经有半年没写了,时间真是容易荒废,这半年过了个春节,去拉萨旅行.本职工作也很忙,没有开展系统的学习和总结. 今年开始静下心来从基础开始学习,主要分为三部分,算法.线性代数.概率统计. 首先学习算 ...
- Python排序算法——冒泡排序
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10786904.html 一.冒泡排序(Bubb ...
- Python排序算法——插入排序
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10787464.html 一.插入排序(Inse ...
- Python排序算法——选择排序
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10787340.html 一.选择排序(Sele ...
随机推荐
- LOJ#2552. 「CTSC2018」假面(期望 背包)
题意 题目链接 Sol 多年以后,我终于把这题的暴力打出来了qwq 好感动啊.. 刚开始的时候想的是: 设\(f[i][j]\)表示第\(i\)轮, 第\(j\)个人血量的期望值 转移的时候若要淦这个 ...
- 【linux学习笔记】began,每次玩这个都特别着迷
胡乱的安装,通过虚拟机,从DVD加载开始,当然网上有大段的装机教程,装了两个Linux发行版,一个是centos7,一个是ubuntu18.04. 分区那些事: 因为处于学习阶段,所以总是因为分区问题 ...
- javascript 权威指南
1.对象 1.1.序列话对象 JSON.stringify() 和 JSON.parse() 用来序列化和还原 javascript 对象. var o = {x:1, y:{z:[false,nul ...
- PHP 运行环境和服务器相关配置
1.在DOS命令窗口输入 mysql -hlocalhost -uroot -p回车 进入mysql数据库, 其中-h表示服务器名,localhost表示本地:-u为数据库用户名,root是mysql ...
- selendroid之inspector
http://selendroid.io/inspector.html 寻找元素.断点模式.
- Java—集合框架Set
Set接口及其实现类——HashSet Set是元素无序并且不可以重复的集合,被称作集. HashSet—哈希集,是Set的一个重要实现类. Set的使用 HashSet没有像List一样的set ...
- Android应用开发基础之八:广播与服务(二)
服务两种启动方式 startService:服务被启动之后,跟启动它的组件没有一毛钱关系 bindService:跟启动它的组件同生共死 绑定服务和解绑服务的生命周期方法:onCreate->o ...
- python接口测试-项目实践(四)拼接出预期结果
四 字符串拼接 空值处理 当某字段接口数据为空,则不显示相关字串. 比如字串原本是 "...,净资产收益率:ROE%",当接口数据中ROE为空,不显示',净资产收益率:%' 三目运 ...
- python入门2 python字符串换行显示、字符串太长\连接多行
#coding:utf-8 #/usr/bin/python """ 2018-11-03 dinghanhua 缩进 换行 """ &qu ...
- CRUD全栈式编程架构之服务层的设计
服务层代码 首先我先放出2个主要类的代码再分别讲解 接口 using System; using System.Collections.Generic; using System.Linq; usin ...