Python常用算法(二)
1.快速排序
过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小
一般选取第一个数作为关键数据k,我们要把比k小的所有数据移到它的左面,从后往前找第一个比它小的数据,交换位置
比k大的数据移到它的右面,从前往后找第一个比它大的数据,交换位置,完成一个循环。
def quick1_sort(list):
if len(list) < 2:
return list
else:
key = list[0]
small = [i for i in list[1:] if i < key]
big = [j for j in list[1:] if j > key]
list = quick1_sort(small) + [key] + quick1_sort(big)
return list a1 = quick1_sort([2,1,4,3,6,5,7,8,10])
print(a1)
def quick_sort(list, left, right):
if left >= right:
return list
key = list[left]
low = left
high = right
while left < right:
while left < right and list[right] >= key:
right -= 1
list[left] = list[right]
while left < right and list[left] <= key:
left += 1
list[right] = list[left]
list[right] = key
quick_sort(list, low, left - 1)
quick_sort(list, left + 1, high)
return list s=[2,1,4,5,3,6,7,9,8]
a = quick_sort(s,0,len(s)-1)
print(a)
2.希尔排序
希尔排序是插入排序的增强版
1.首先知道整个列表的长度N,设置步数为step=N/2(取整数),
从第一个元素开始,每相隔为step的两个元素组成一组,按照直接插入的方法对每个小组进行排序,完成第一次排序
2.第二次排序将步数缩减一半,即step1=step/2,在按照步骤一的方法进行排序
3.重复步骤2,直到变成有序
def shell_sort(list):
gap = len(list)//2
while gap > 0:
for i in range(0, gap):
j = i+gap
while j < len(list):
k = j - gap
key = list[j]
while k >= 0:
if list[k] > key:
list[k+gap] = list[k]
list[k] = key
k -= gap
j += gap
gap = gap//2
return list a = shell_sort([2,1,4,3,9,7,8,6])
print(a)
def shell1_sort(list):
gap = len(list)//2
while gap > 0:
for i in range(gap, len(list)):
key = list[i]
j = i
while j >= gap:
if list[j-gap] > key:
list[j] = list[j-gap]
list[j-gap] = key
j = j - gap
gap = gap//2
return list a1 = shell1_sort([2,1,4,3,9,7,8,6])
print(a1)
3.归并排序
使用分割的方法将这个序列分割成一个个已经排好序的子序列,再利用归并的方法将其合成一个排序好的序列
#拆解的函数
def merge_sort(list):
if len(list) < 2:
return list
mid_length = len(list)//2
left = merge_sort(list[:mid_length])
right = merge_sort(list[mid_length:])
return merge(left,right)#合并 #return merge1(left, right) #合并函数
def merge(left, right):
result = []
while left and right:
result.append(left.pop(0) if left[0] <= right[0] else right.pop(0))
while left:
result.append(left.pop(0))
while right:
result.append(right.pop(0))
return result def merge1(left, right):
result = []
i, j = 0, 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
result += left[i:]
result += right[j:]
return result a = merge_sort([4,7,1,2,8,9,3,6])
print(a)
Python常用算法(二)的更多相关文章
- Python常用算法
本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机 ...
- 第四百一十四节,python常用算法学习
本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机 ...
- Python 常用算法记录
一.递归 汉诺塔算法:把A柱的盘子,移动到C柱上,最少需要移动几次,大盘子只能在小盘子下面 1.当盘子的个数为n时,移动的次数应等于2^n – 1 2.描述盘子从A到C: (1)如果A只有一个圆盘,可 ...
- python常用算法学习(3)
1,什么是算法的时间和空间复杂度 算法(Algorithm)是指用来操作数据,解决程序问题的一组方法,对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但是在过程中消耗的资源和时间却会有很大 ...
- python常用算法学习(4)——数据结构
数据结构简介 1,数据结构 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成.简单来说,数据结构就是设计数据以何种方式组织并存贮在计算机中.比如:列表,集合与字 ...
- python 常用算法学习(2)
一,算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时间内获得所要求 ...
- Python常用模块二
一.time & datetime #_*_coding:utf-8_*_ import time # print(time.clock()) #返回处理器时间,3.3开始已废弃 , 改成了t ...
- Python常用模块(二)
一.json与pickle json与pickle模块是为了完成数据的序列化. 序列化是指把对象(变量)从内存中变成可存储或传输的过程,在Python中叫picking,在其他语言中也由其他的叫法,但 ...
- python常用算法(7)——动态规划,回溯法
引言:从斐波那契数列看动态规划 斐波那契数列:Fn = Fn-1 + Fn-2 ( n = 1,2 fib(1) = fib(2) = 1) 练习:使用递归和非递归的方法来求解斐波那契数 ...
随机推荐
- CRF资料
与最大熵模型相似,条件随机场(Conditional random fields,CRFs)是一种机器学习模型,在自然语言处理的许多领域(如词性标注.中文分词.命名实体识别等)都有比较好的应用效果.条 ...
- PHP获取指定地区的天气
在开发网站的时候用到天气查询,由于是基于Wordpress的 所以有很多限制,先建一个[weather.php]的文件,然后看代码: <?php //获取天气 $url = 'http://m. ...
- Oracle常用数据库对象(片段)
1:用户和权限 1.1 用户的创建 a)语法--- create user 用户名 identified by 密码: b)创建用户abcd,并设定密码为abcd;---注意:操作数据库对象是 ...
- Demo3
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- 超精简易用cocoaPods的安装和使用
cocoaPods 安装和使用 第一步:替换ruby源 $ gem sources -l 查看当前ruby的源 $ gem sources ...
- Java 8 Stream
1.关于Java8部分新特性介绍 Java8的新特性很多,在此就不一一介绍了,这里只说一下我自己在工作用用得比较多的几点: 1.1.Lambda表达式 Lambda允许把函数作为一个方法的参数(函数作 ...
- convert sorted list to binary search tree(将有序链表转成平衡二叉搜索树)
Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...
- mysql cluster部署
一.mysql cluster的基本概念 1.mysql cluster的组成 管理(MGM)节点:这类节点的作用是管理MySQL Cluster内的其他节点,如提供配置数据.启 ...
- FFPLAY的原理(四)
意外情况 你们将会注意到我们有一个全局变量quit,我们用它来保证还没有设置程序退出的信号(SDL会自动处理TERM类似的信号).否则,这个线程将不停地运 行直到我们使用kill -9来结束程序.FF ...
- 最全的 Swift 4 新特性解析
转自: http://www.jianshu.com/p/f35514ae9c1a WWDC 2017 带来了很多惊喜.Swift 4 也伴随着 Xcode 9 测试版来到了我们的面前,很多强大的新特 ...