在路上---学习篇(一)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 的习惯,因此总会有开 ...
随机推荐
- 小白终于解决了在学习Go中不知道Makefile是什么的难题
如何在Go中使用Makefile 1.Makefile是什么 Makefile是一种构建工具,用于在项目中定义和执行一系列命令.它通常包含了一些规则和目标,用于编译.测试.运行和清理项目. 2.Mak ...
- AVR汇编(五):算术和逻辑指令
AVR汇编(五):算术和逻辑指令 算术运算指令 AVR中对于算术运算提供了加法.减法和乘法指令,没有除法指令. ADD ADD 指令用于执行加法操作,相关的变体指令有:一般加法 ADD .带进位加法 ...
- 7.1 C++ STL 非变易查找算法
C++ STL 中的非变易算法(Non-modifying Algorithms)是指那些不会修改容器内容的算法,是C++提供的一组模板函数,该系列函数不会修改原序列中的数据,而是对数据进行处理.查找 ...
- [ABC284F] ABCBAC
2023-01-09 题目 题目传送门 翻译 翻译 难度&重要性(1~10):2.5 题目来源 AtCoder 题目算法 Z函数,KMP,字符串Hash 解题思路 对于一个 \(f_S\),我 ...
- trino on yarn
一.前言 最近在研究trino on yarn 功能,网上大部分都是关于presto on yarn文章,关于trino on yarn 资料很少,但是本质上差不多,需要修改一些内容比,主要在调试方面 ...
- 《CTFshow-Web入门》04. Web 31~40
@ 目录 web31 题解 原理 web32 题解 原理 web33 题解 web34 题解 web35 题解 web36 题解 web37 题解 原理 web38 题解 原理 web39 题解 we ...
- python flask 提供web的get/post开发
转载请注明出处: 使用python flask框架编写web api中的get与post接口,代码编写与调试示例如下: from flask import Flask, request, jsonif ...
- 代码随想录算法训练营第二十八天| 93.复原IP地址 78.子集 90.子集II
93.复原IP地址 卡哥建议:本期本来是很有难度的,不过 大家做完 分割回文串 之后,本题就容易很多了 题目链接/文章讲解:https://programmercarl.com/0093.%E5% ...
- Solidity-变量和数据类型[基本类型]
在solidity语言中,变量和数据类型分为三类:基本类型(bool.int.address等),复合类型(array.struct.mapping等)和特殊类型(enum.function.modi ...
- 【Qt6】列表模型——便捷类型
前一篇水文中,老周演示了 QAbstractItemModel 抽象类的继承方法.其实,在 Qt 的库里面,QAbstractItemModel 类也派生了两个基类,能让开发者继承起来[稍稍]轻松一些 ...