算法(Algorithm):一个计算过程,解决问题的方法
时间复杂度:用来评估算法运行效率的一个东西
ps:在日常使用中,请使用sort(),because no zuo no die!

1.冒泡排序:
指针如同气泡一样一个个由下向上浮,每次上浮如果上面的数比自己小则交换位置,这样就保证每次可以使最大的数字排列在最上面,重复此过程直到所有数有序;时间复杂度为O(n2),wtf,平方怎么打,就酱吧。

 def bubble_sort_x(data):
for i in range(len(data)-1): # 在循环到最后一个数的时候就不需要再比较了,因为此时列表已经排列好了
for j in range(len(data)-i-1): # 指针一点点上浮的过程
if data[j] > data[j+1]
data[j+1], data[j] = data[j], data[j+1]

"调优后",但是你会发现并不是真正的调优,时快时慢,因为此调优仅对当某次交换完成后发现下面的数并未进行交换(也就是已经排序好了),那么就可以认为已经完成可以返回了,但是因为是这种特殊情况并不是每次都会出现,但是每次循环你必须要做一次判断,so,这个时间开销却是必须的,因此权衡利弊这下,北神还是觉得上面的好,简单易懂,萌萌哒。

 def bubble_sort(data):
for i in range(len(data)-1):
exchange = False
for j in range(len(data) - i - 1):
if data[j] > data[j+1]:
data[j], data[j+1] = data[j+1], data[j]
exchange = True
if not exchange:
return

2.选择排序:
默认以无序区第一个数为列表内的最小数,然后遍历列表开始跟默认比较大小,如果发现了比默认值小的则成为新的默认最小数,遍历完成后会发现列表中的最小数再与第一个数互换位置,重复此过程就可以保证列表从第一个数开始由小到大排序;时间复杂度为O(n2),运行时间比冒泡快,因为它与冒泡一样都对数就行了比较,但是并没有直接互换位置,直到一次循环完成后找到了最小数才进行了一次位置互换,so,冒泡排序被吊打了。

 def insert_sort_x(data):
for i in range(len(data)-1):
min_loc = i
for j in range(i+1, len(data)): # 从下一个开始跟i比较
if data[j] < data[min_loc]:
min_loc = j
data[i], data[min_loc] = data[min_loc], data[i]

3.希尔排序:
选择排序的升级版本,讲列表进行多次分段后各自进行排序,最后形成一个偏向有序的大列表,然后对整个大列表进行一次选择排序形成最终有序列表,看不懂就对了,没什么卵用。

 def shell_sort_x(data):
gap = int(len(data) // 2)
while gap >= 1:
for i in range(gap, len(data)):
tmp = data[i]
j = i - gap
while j >= 0 and tmp < data[j]:
data[j + gap] = data[j]
j -= gap
data[i - gap] = tmp
gap = gap // 2

4.快速排序:
取第一个元素x使其归位,列表分成两部分,左边都比x小,右边都比x大,然后对这两边递归进行排序。

 def quick_sort_x(data, left, right):
mid = partition(data, left, right) # x归位
quick_sort_x(data, left, mid-1)
quick_sort_x(data, mid+1, right) def partition(data, left, right):
tmp = data[left]
while left < right:
while left < right and data[range] >= tmp:
right -= 1
data[left] = data[right]
while left < right and data[left] <= tmp:
left += 1
data[right] = data[left]
data[left] = tmp

5.归并排序:
将数组递归切分成单个元素后对比排序合并。

 def merge_sort_x(data, low, high):
if low < high:
mid = (low + high) // 2
merge_sort_x(data, low, mid)
merge_sort_x(data, mid+1, high)
merge(data, low, mid, high) def merge(data, low, mid, high):
i = low
j = mid + 1
ltmp = []
while i <= mid and j <= high:
if data[i] < data[j]: # 两边数依次取出比较大小
ltmp.append(data[i])
i += 1
else:
ltmp.append(data[j])
j += 1
while i <= mid: # 下面2个while只有一个会执行
ltmp.append(data[i])
i += 1
while j <= high:
ltmp.append(data[j])
j += 1
data[low:high+1] = ltmp

6.插入排序:
默认第一个元素是有序的,然后根据依次比较下一个元素与有序区内元素确定其位置。

 def insert_sort_x(data):
for i in range(1, len(data)):
tmp = data[i]
j = i - 1
while j >= 0 and tmp < data[j]:
data[j + 1] = data[j]
j -= 1
data[j + 1] = tmp

7.堆排序:
建立一个堆,后去掉堆顶元素为最大元素放置于堆末尾(之后不参与计算),通过一次调整再次得到堆顶,循环重复此过程。

 def sift(data, low, high):
i = low
j = 2 * i + 1
tmp = data[i]
while j <= high:
if j < high and data[j] < data[j + 1]:
j += 1
if tmp < data[j]:
data[i] = data[j]
i = j
j = 2 * i + 1
else:
break
data[i] = tmp def heap_sort_x(data):
n = len(data)
for i in range(n // 2 - 1, -1, -1):
sift(data, i, n - 1)
for i in range(n - 1, -1, -1):
data[0], data[i] = data[i], data[0]
sift(data, 0, i - 1)

python第三十二天-----算法的更多相关文章

  1. python数据结构与算法

    最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

  2. 【转】你真的理解Python中MRO算法吗?

    你真的理解Python中MRO算法吗? MRO(Method Resolution Order):方法解析顺序. Python语言包含了很多优秀的特性,其中多重继承就是其中之一,但是多重继承会引发很多 ...

  3. Python数据结构与算法--List和Dictionaries

    Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...

  4. Python数据结构与算法--算法分析

    在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...

  5. Python实现ID3算法

    自己用Python写的数据挖掘中的ID3算法,现在觉得Python是实现算法的最好工具: 先贴出ID3算法的介绍地址http://wenku.baidu.com/view/cddddaed0975f4 ...

  6. 以图搜图(一):Python实现dHash算法(转)

    近期研究了一下以图搜图这个炫酷的东西.百度和谷歌都有提供以图搜图的功能,有兴趣可以找一下.当然,不是很深入.深入的话,得运用到深度学习这货.Python深度学习当然不在话下. 这个功能最核心的东西就是 ...

  7. Python之排序算法:快速排序与冒泡排序

    Python之排序算法:快速排序与冒泡排序 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/7828610.html 入坑(简称IT)这一行也有些年头了,但自老师 ...

  8. python实现排序算法 时间复杂度、稳定性分析 冒泡排序、选择排序、插入排序、希尔排序

    说到排序算法,就不得不提时间复杂度和稳定性! 其实一直对稳定性不是很理解,今天研究python实现排序算法的时候突然有了新的体会,一定要记录下来 稳定性: 稳定性指的是 当排序碰到两个相等数的时候,他 ...

  9. python常见排序算法解析

    python——常见排序算法解析   算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...

随机推荐

  1. win10打不开菜单且点击通知栏无反应的解决方法

    1.在键盘上按下win+R键,或在开始菜单图标上点击右键选择"运行" 2.输入powershell,按下“确定”运行 3.在窗口里输入或复制粘贴以下命令,注意只有一行: Get-A ...

  2. 移动端的坑 之 在可编辑的div中实现placeholder

    1.当我们个  div 设置了 contenteditable = "true" 这个块状元素就可以编辑了, 如果要实现 placeholder 直接写上去是没有效果的 <d ...

  3. 阿里云服务器windows server2008r2+tomcat8.0+nginx1.12

    弄了两天的nginx,从了解开始,可能是我理解能力太差了,惭愧惭愧!但是还好看了一些大神的文章总算有点眉目了,此篇用来当作自己的笔记,大家看不懂,勿喷,但是如果有问题,直接回复,我可以给你解答一下,前 ...

  4. flsk-SQLALchemy

    SQLALchemy 一.介绍     SQLALchemy是一个基于Python实现的ORM框架.该框架是建立在DB API之上,使用关系对象映射进行数据库操作     简言之便就是:将类和对象转换 ...

  5. Node.js初接触(一)

    本来还在纠结着到底要学哪一种后台语言呢,突然发现node.js很火,既然能被这么多人推崇,自然是有他的优势的.去百度百科看了一眼,或许是我理解能力太差,并没有了解到很多关于node.js的东西,大概就 ...

  6. zoj3988 二分图匹配

    给一个数组,对于每两个数加起来为素数那么就是一个集合,求不超过k个集合的最多数是多少 解法:二分图匹配,先打素数筛,预处理边集,匹配完之后分两种情况k>匹配数,那么可以直接输出匹配数*2,否则可 ...

  7. Codeforces Round #435 (Div. 2) c+d

    C:给n和k要求,找出n个不同的数,使得亦或起来等于k 可以先预处理从1到1e5,找亦或起来等于(11111111111111111)(二进制)的所有对数,然后四个一起亦或就是0了,再和k亦或 可以看 ...

  8. python后端面试题

    1. 果壳 电话面试: 说一下TCP的三次握手,四次挥手,为什么会这样? http安全的性的了解,说一下对cookie和session的了解: 对mysql的了解,说一下你常用的数据类型,char和v ...

  9. AliRedis单机180w QPS, 8台服务器构建1000w QPS Cache集群(转)

    http://blog.sina.com.cn/s/blog_e59371cc0101br74.html 引言:        如今redis凭借其高性能的优势, 以及丰富的数据结构作为cache已越 ...

  10. Tomcat 多端口访问多应用设置

    目的 配置Tomcat,使用多端口访问不同应用 步骤 测试Tomcat版本为apache-tomcat-8.0.5,理论上支持7.0之上的版本 找到tomcat的主目录,打开conf文件夹,找到并打开 ...