| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【快速排序】:绝对是史上最全的快速排序分析,分析了所有的边界情况并给出算法可视化动图帮助你理解算法 -> 正文阅读 |
|
[数据结构与算法]【快速排序】:绝对是史上最全的快速排序分析,分析了所有的边界情况并给出算法可视化动图帮助你理解算法 |
目录 do i++; while(q[i] < x);? ?//用while(q[++i]= x)也是等价的语句> do j--; while(q[j] > x);? 会使得 q[j+1..r] >= x, q[j] <= x if(i < j) swap(q[i], q[j]);? 会使得 q[l..i] <= x, q[j..r] >= x 六.顺便给出从大到小快排的模板(只需要改动两个大小符号即可) 一:快速排序概念定义????????排序问题可以说是最经典的算法问题了,一般一开始学的基础算法就是排序,排序既是算法的基础,也是考研数据结构的重要知识点。但是?C/C++ 都有现成的库函数(C里是 qsort、C++是sort),所以导致很多人就没有学排序算法本身,其实排序算法的思路非常有意思,从最简单的学起,对以后学习复杂算法是非常有帮助的,比如快速排序和快速选择之间的关系,归并排序和逆序对之间的关系。
原始数据: 排序可视化过程:
二:题目描述? ? ? ? 给你一个长度为n(n<=100000)的整数数组a,请你将该数组升序排列 三:算法详解先给出我个人的万能模板(个人习惯以j分界,文章后面详细说明怎么用i分界):?
算法证明:?借鉴算法导论的循环不变式的方法 快排核心模板:
证明目标:循环不变式,即任意一次while循环(除了最后一次while循环)结束后,q[l..i] <= x,q[j..r] >= x 证明过程: 1.初始化:i = l - 1, j = r + 1,显然此时q[l..i],q[j..r]为空,证明目标显然成立 2.保持:假设下一轮循环开始之前的循环不变式成立,即?q[l..i] <= x? ,? q[j..r] >= x 执行上述的循环体
注:由于i和j的设定问题,i和j必须要先自增!!否则在特殊情况(比如去q[i]和q[j]都等于x)下就会死循环 比如:
3.终止:最后一轮循环结束时?j <=i且只有j+1=r或者j=r两种情况 四.常见边界问题汇总以及分析1.以j划分时,随机值x为什么不能选q[r],以i划分时,随机值x为什么不能选q[l]
2.?do i++; while(q[i] < x)和do j--; while(q[j] > x)为什么不能用q[i] <= x 和 q[j] >= x
3.?if(i < j) swap(q[i], q[j])能否使用 i <= j
4.最后一句能否改用左区间quick_sort(q, l, j-1),右区间?quick_sort(q, j, r)作为划分(用i做划分时也有同样的问题)?
五.给出以i划分的模板
六.顺便给出从大到小快排的模板(只需要改动两个大小符号即可)
如果觉得有问题欢迎私聊,如果绝对写的不错,欢迎支持,创作不易。 七:排序的稳定性以及时空复杂度 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 21:28:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |