在路上---学习篇(一)Python 数据结构和算法 (3) --快速排序
独白:
前几天学的基本简单排序算法,相对来说接受起来还是可以的,今天学的快速排序,视频看了2遍加上自己的思考,才真正的研究明白。自己的编程思维在逐渐的形成,日后还需勤加练习。心得:越高级的算法,越是让人难理解。为了追求算法时间的缩短,需要更多知识来进行支撑。
快速排序
快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
步骤为:
- 从数列中挑出一个元素,称为"基准"(pivot),
- 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
- 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。
"""
快速排序
最优时间复杂度:O(nlogn)
最坏时间复杂度:O(n2)
稳定性:不稳定 """
import time
import random def quick_sort(list, star, end):
# 递归的退出条件
if star >= end:
return # low为序列左边的由左向右移动的游标
low = star # high 为序列右边的由右向左移动的游标
high = end # 设定其实元素为要寻找位置的基准元素
mid_value = list[star] while low < high:
# 如果low 与high 未重合,high 指向的元素不比基准元素小,则high向左移
while low < high and list[high] >= mid_value:
high -= 1 # 将high 指向的元素放到low 的位置上
list[low] = list[high] # 如果low与high未重合,low指向的元素比基准元素小,low的向右移
while high > low and list[low] < mid_value:
low += 1 # 将low指向的元素放到high的位置上
list[high] = list[low] # 退出循环后,low 与high重合,此时所指位置为基准元素的正确位置
# 循环退出时 将基准元素放到该位置
list[low] = mid_value # 对基准元素的左边的子序列进行快速排序
quick_sort(list, star, low-1) # 对基准元素右边的子序列进行快速排序
quick_sort(list, low+1, end) def new_num(lis):
"""随机生成50个数加入列表中"""
for i in range(50):
j = random.randint(0,10000)
lis.append(j) if __name__ == '__main__': first_time = time.time()
# 空列表
lis = [] # 随机函数添加到列表中
new_num(lis) # 列表排序
quick_sort(lis, 0, len(lis)-1) print(lis) # 结束时间
last_time = time.time() print("共用时%s" % (last_time - first_time))
在路上---学习篇(一)Python 数据结构和算法 (3) --快速排序的更多相关文章
- python数据结构与算法
最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...
- Python数据结构与算法--List和Dictionaries
Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...
- Python数据结构与算法--算法分析
在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...
- Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...
- Python数据结构与算法之图的广度优先与深度优先搜索算法示例
本文实例讲述了Python数据结构与算法之图的广度优先与深度优先搜索算法.分享给大家供大家参考,具体如下: 根据维基百科的伪代码实现: 广度优先BFS: 使用队列,集合 标记初始结点已被发现,放入队列 ...
- Python之排序算法:快速排序与冒泡排序
Python之排序算法:快速排序与冒泡排序 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/7828610.html 入坑(简称IT)这一行也有些年头了,但自老师 ...
- Python实现排序算法之快速排序
Python实现排序算法:快速排序.冒泡排序.插入排序.选择排序.堆排序.归并排序和希尔排序 Python实现快速排序 原理 首先选取任意一个数据(通常选取数组的第一个数)作为关键数据,然后将所有比它 ...
- Python数据结构与算法设计总结篇
1.Python数据结构篇 数据结构篇主要是阅读[Problem Solving with Python]( http://interactivepython.org/courselib/static ...
- Python数据结构与算法设计(总结篇)
的确,正如偶像Bruce Eckel所说,"Life is short, you need Python"! 如果你正在考虑学Java还是Python的话,那就别想了,选Pytho ...
- GitHub上最火的、最值得前端学习的几个数据结构与算法项目!没有之一!
Hello,大家好,我是你们的 前端章鱼猫. 简介 前端章鱼猫从 2016 年加入 GitHub,到现在的 2020 年,快整整 5 个年头了. 相信很多人都没有逛 GitHub 的习惯,因此总会有开 ...
随机推荐
- 自定义javascript中call、bind、apply方法
call.bind.apply都是Function原型上的方法,用于改变this的指向 自定义函数 js中的call.bind.apply是用c++代码实现的,我们这里使用js代码做一个模式,没有把所 ...
- EXP 一款 Java 插件化热插拔框架
EXP 一款 Java 插件化热插拔框架 前言 多年以来,ToB 的应用程序都面临定制化需求应该怎么搞的问题. 举例,大部分本地化软件厂家,都有一个标准程序,这个程序支持大部分企业的功能需求,但面对世 ...
- 三维模型OSGB格式轻量化顶点压缩主要技术方法分析
三维模型OSGB格式轻量化顶点压缩主要技术方法分析 在三维模型应用中,轻量化处理是提高数据传输效率.减少渲染时间和优化用户体验的重要手段.而OSGB格式是一种常见的三维模型格式,在进行轻量化处理时,顶 ...
- WPF MVVM之点滴分享
(第五点:绑定源有修改) 我并不打算长篇累牍的介绍什么是MVVM.我尽量简洁的介绍,并把自己的经验分享给大家. 一.关于MVVM M:Model,数据模型(后台存储数据的类) V:View,视图(大部 ...
- brpc internal
brpc 内部实现 thread model pthread 1:1atomic cache同步降低性能 fiber n:1 -> nginx 多核难以扩展, 用户不能做阻塞操作. contex ...
- 简述Spring Cache缓存策略
一.简介 Spring框架提供了一种名为Spring Cache的缓存策略.Spring Cache是一种抽象层,它提供了一种方便的方式来管理缓存,并与Spring应用程序中的各种缓存实现(如EhCa ...
- mysql锁初识
MySQL锁的粒度分为:行级锁.表级锁.页级锁. 一.行级锁(INNODB引擎) 行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁. 行级锁能大大减少数据库操作的冲突.其加锁粒 ...
- Solution -「SP 106」BINSTIRL
Description Link. 求 \(\begin{Bmatrix}n \\ m\end{Bmatrix}\bmod2\) Solution 求 \[\begin{aligned} \begin ...
- Jupyter_Notebook_添加代码自动补全功能
Jupyter Notebook 添加代码自动补全功能 安装 如果之前安装过显示目录功能的话,这一步骤可以跳过. pip install jupyter_contrib_nbextensions 配置 ...
- AI在人才测评领域的应用情况概述
目录 收起 一.AI技术的通俗理解 二.AI在人才测评领域的应用情况概述 三.AI在构建人才标准上的应用 1.人才标准构建 2.人才画像 3.人岗智能匹配 四.AI在人才测评实施方面的应用 1.AI面 ...