数据结构:严蔚敏、殷人昆快速排序规则不同的疑问
快速排序
Partition 过程:将要排序的数据分成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小。快速排序整个排序过程可以递归进行,以此达到整个数据变成有序序列。
注:408原题中说,对所有尚未确定最终位置的所有元素进⾏⼀遍处理称为“⼀趟”排序,因此⼀次“划分”≠⼀趟排序。因此,⼀次 Partition 可以确定⼀个元素的最终位置,⽽⼀趟排序也许可以确定多个元素的最终位置。
需要注意的是,严蔚敏和殷人昆给出了两种不同的快排方法。虽然两种方法均正确,但排序中间步骤得到的序列不同,导致做题时对答案产生疑惑。本文对这两种快排算法进行总结与对比。
严蔚敏《数据结构》P274
排序过程举例:
以上述第一趟为例,快排的过程展示如下。先圈出最左边的 49,把最左边位置空出来,然后让指针从最右边的 49 开始往左走。
代码
// 一趟快排
int Partition(SqList &L, int low, int high) {pivotkey = L[low]; //用字表的第一个记录记录枢轴的位置while (low < high) {while (low < high && L[high] > pivotkey) --high; //将比枢轴记录小的记录移到低端L[low] = L[high];while (low < high && L[low] < pivotkey) ++low;L[high] = L[low]; //将比枢轴记录大的记录移到高端}L[low] = pivotkey; //枢轴记录到位return low; //返回枢轴位置
}// 快速排序算法
void Qsort(Sqlist &L, int low, int high) {if (low < high) { //长度大于1pivotloc = Partition(L, low, high); //将L一分为2QSort(L, low, pivotloc - 1); //对低子表递归排序,pivotloc是枢轴位置Qsort(L, pivotloc + 1, high); //对高子表递归排序}
}
殷人昆《数据结构》P406
排序过程举例:
代码
#include <iostream>#define LEN 9
using namespace std;void Print(int A[]) {for (int i = 0; i < LEN; i++) {cout << A[i] << " ";}cout << endl;
}void Swap(int &a, int &b) {int tmp = a;a = b;b = tmp;
}int Partition(int A[], int low, int high) {int pivotpos = low;int pivot = A[low];for (int i = low + 1; i < high + 1; ++i) {if (A[i] < pivot) {pivotpos++;if (pivotpos != i) {Swap(A[pivotpos], A[i]);}}}A[low] = A[pivotpos];A[pivotpos] = pivot;Print(A);return pivotpos;
}void QuickSort(int A[], const int left, const int right) {if (left < right) {int privotpos = Partition(A, left, right);QuickSort(A, left, privotpos - 1);QuickSort(A, privotpos + 1, right);}
}int main() {int A[] = {12, 2, 16, 30, 28, 10, 20, 6, 18}; //0~10QuickSort(A, 0, LEN - 1);return 0;
}
测试用例
示例 1
初始序列:
20, 4, 34, 5, 16, 33, 18, 29, 2, 40, 7
每一次调用 Partition 的结果:
7 4 5 16 18 2 20 29 33 40 34
2 4 5 7 18 16 20 29 33 40 34
2 4 5 7 18 16 20 29 33 40 34
2 4 5 7 18 16 20 29 33 40 34
2 4 5 7 16 18 20 29 33 40 34
2 4 5 7 16 18 20 29 33 40 34
2 4 5 7 16 18 20 29 33 40 34
2 4 5 7 16 18 20 29 33 34 40
示例 2
初始序列:
12, 2, 16, 30, 28, 10, 20, 6, 18
每一次调用 Partition 的结果:
6 2 10 12 28 16 20 30 18
2 6 10 12 28 16 20 30 18
2 6 10 12 18 16 20 28 30
2 6 10 12 16 18 20 28 30
数据结构:严蔚敏、殷人昆快速排序规则不同的疑问相关推荐
- 数据结构殷人昆电子版百度云资源_数据结构精讲与习题详解(C语言版第2版清华大学计算机系列教材)...
导语 内容提要 殷人昆编著的<数据结构精讲与习题详解(C语言版第2版清华大学计算机系列教材)>是清华大学出版社出版的<数据结构(C语言版)>(第2版)的配套教材,对" ...
- 殷人昆 数据结构(用面向对象方法与C++语言描述)(第二版)实现汇总(持续更新)
殷人昆 数据结构(用面向对象方法与C++语言描述)(第二版)实现汇总 殷人昆 数据结构(用面向对象方法与C++语言描述)(第二版)实现汇总 第二章 线性表 第二章 线性表 约瑟夫问题(线性表实现)约瑟 ...
- 构建线性表的c语言代码,数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码...
1.运行环境 这里说明一下这里所有的C语言代码都是基于code::blocks 20.03编译运行的.当然一些其他集成开发环境应该也是可以的,个人不太喜欢功能太过强大的IDE,因为那同样意味着相关设置 ...
- 数据结构 严蔚敏 第二章 线性表
数据结构 严蔚敏 第二章 线性表 线性表:由n个(n>=0)数据特征相同的元素构成的有限序列. 线性表的类型定义表示和实现 顺序表 存储单元地址连续 随机存取 若每个元素占用 m 个存储单元,以 ...
- 【计算机】数据结构-严蔚敏/清华大学P3
[计算机]数据结构-严蔚敏/清华大学P1 第二章 线 性表 线性结构 是 一个数据元素的有序(次序)集 线性结构的基本特征: 1. 集合中必存在唯一的一个"第一元素": ...
- 数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码
数据结构严蔚敏C语言版-线性表顺序存储结构(顺序表)C语言实现相关代码 1.运行环境 2.准备工作 1)项目构建 1>新建一个SeqList项目 2>新建两个文件Sources和Heade ...
- 数据结构----严蔚敏
最近一直想找一本纯数据结构的书来学习,找来找去都没有找到一本合适的书籍,相比之下国内的书籍之中,严蔚敏和吴伟民的还算是经典版了,很多国内其他数据结构教材都参考这本书的.但缺点是很多都是伪代码,对编程初 ...
- 数据结构严蔚敏清华大学pdf_2019年清华大学自动化系控制工程专业大数据方向考研经验分享...
基本情况(以下内容仅代表个人观点) 我目前就读于西南某双非石油工程专业,2019考研报考清华大学自动化系大数据工程专业,一志愿复试被刷,侥幸调剂录取至微电子系.初试总分346分(政治-63 + 英语一 ...
- 殷人昆《数据结构与算法解析》目录(持续更新)
绝对不删,纯属代码搬运.两年内,看能更新多少... 第一章 数据结构绪论 前六个跳过了,属于两个数比较大小难度题目.以后约定俗成,用c解决.c++慎用.确保它的基础性和实用性. 1-7 枚举数字排序问 ...
最新文章
- Android入门:DDMS视图
- 听说你想去大厂看妹子,带你看看美团后端开发实习岗详细面经
- 怎么样在线创建索引或者重构索引
- 排序下---(冒泡排序,快速排序,快速排序优化,快速排序非递归,归并排序,计数排序)
- 【转】ABP源码分析十五:ABP中的实用扩展方法
- 【HDU - 1025】Constructing Roads In JGShining's Kingdom(dp最长上升子序列模型 + 二分优化)
- boot lib分离 spring_spring boot + gradle打包bootJar分离lib
- 各个OS关于查看磁盘和wwn号的方法
- 微信小程序之wx.request:fail错误,真机预览请求无效问题解决,安卓,ios网络预览异常(转)...
- 0.3:Before We Start
- 在centos上安装html,Centos-7安装pdf2htmlEX
- robot framework-ride导入Selenium2Library报错,已解决
- kali linux 源码免杀,shellcode超级免杀
- Abnova循环肿瘤DNA丨全血分离,基因组DNA萃取分析
- c++实现经典游戏——贪吃蛇
- vmware workstation虚拟机安装Debian系统教程
- uniapp禁止单页面侧滑返回
- php图片生成邀请函,科学网—如何制作邀请函 - 樊晓英的博文
- iOS UITextView 纯英文排版换行出错的解决方案
- 【Rust 日报】2022-10-16 全栈同构Web框架leptos
热门文章
- CodeForces - 670C Cinema(离散化+排序/map,水题)
- POJ - 3614 Sunscreen(贪心/二分图最大匹配-多重匹配/网络流-最大流)
- 2019ICPC(南昌) - The Nth Item(矩阵快速幂)
- POJ1279(求多边形内核的面积)
- WinSock编程基础
- Windows系统程序设计之结构化异常处理
- leetcode-260.只出现一次的数字 III 解法
- 从 DevOps 到 Serverless
- GitHub被中国人霸榜!国外开发者不开心了
- Python中的进程间通信