博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
quick sort | 快速排序 C++ 实现
阅读量:6699 次
发布时间:2019-06-25

本文共 1122 字,大约阅读时间需要 3 分钟。

Talk is cheap, show me the code

  • 参照中C++实现(递归)方式, 略改一点点, 更容易理解. 代码如下:
void quick_sort_recursive(vector
&a, int start, int end) { if (start >= end) return; int base = a[end]; int left = start, right = end - 1; // 从right=end开始也无妨, 因为`>=`就--right while (true) { while (a[left] < base) ++left; while (a[right] >= base) --right; if (left >= right) break; swap(a[left], a[right]); // 原wiki的代码方式将出现多次浪费的swap,如swap(a[1],a[1])这种形式 } if (a[left] >= a[end]) swap(a[left], a[end]); // 将base放到指定位置 else ++left; quick_sort_recursive(a, start, left - 1); quick_sort_recursive(a, left + 1, end);}

需要说明的是:

  • while (arr[right] >= mid) right--; 如果>=换成>会导致陷入无限循环
  • 第一个while之后的if else语句作用是将mid放到指定位置(不会再变的位置), 完成左右划分,左边都是<mid,右边都是>=mid.
  • 上述实现过程和<算法导论>思路有差异, 和<数据结构/算法/C++实现> 思路一致,但是实现上略有差异

示例

int main() {    vector
a{4, 8, 1, 3, 7, 5, 6, 2, 4, 4}; quick_sort_recursive(a, 0, a.size() - 1); return 0;}

if a[left]>base, ++left;

if a[right]<=base, --right;

内层while第1次swap

图片描述

第2, 3次变化过程

图片描述

跳出while后

图片描述

注意

该示例中, 如果if a[right]<=base, --right;没有=号将陷入死循环, 亲自演算一下排序过程大有裨益!

转载地址:http://yomoo.baihongyu.com/

你可能感兴趣的文章
《塑造互联网思维的企业》一一第4章 全球商务向社会化媒体的转变
查看>>
《简明电路分析》——导读
查看>>
[MySQL 5.6优化] --order by limit x,x 优化
查看>>
《Python爬虫开发与项目实战》——第3章 初识网络爬虫 3.1 网络爬虫概述
查看>>
《Adobe InDesign CS6中文版经典教程》—第1课1.5节修改文档的缩放比例
查看>>
《3ds Max疯狂设计学院》——1.6节3ds Max 2016新增的主要功能
查看>>
提升你的开发效率,10 个 NPM 使用技巧
查看>>
《Pro/ENGINEER野火版5.0从入门到精通》——2.5 设置零件单位
查看>>
《游戏视频主播手册》——2.2 哪些人适合做游戏主播
查看>>
《Windows PowerShell实战指南(第2版)》——1.4 搭建自己的实验环境
查看>>
《黑客秘笈——渗透测试实用指南》—第2章2.3节 外部或内部的主动式信息收集...
查看>>
3D打印技术在医疗领域能做些什么?帮助精确完成手术
查看>>
如何在Docker容器中运行GUI程序
查看>>
《C和C++代码精粹》——1.7 类型安全I/O
查看>>
《计算机科学概论》—第3章3.3节文本表示法
查看>>
2016大数据发展7大趋势
查看>>
《无线网络:理解和应对互联网环境下网络互连所带来的挑战》——第2章 无线生态系统 2.1无线标准化过程...
查看>>
Storm ack和fail机制再论
查看>>
ROS机器人程序设计(原书第2版)2.3 理解ROS开源社区级
查看>>
《MySQL排错指南》——1.9 许可问题
查看>>