1. 原理

首先, 在一个待排序序列中, 以第一个元素为基准, 让序列中所有的基准小的元素在该元素左边, 比其大的元素在其右边. 算法是一种原地算法, 首先把序列里面从基准开始的下一个元素一直到序列尾, 分成左右部分, 左边的都是小的, 右边的都是大的, 最后把基准跟中点交换一下, 再递归对左右部分进行同样的方法排序, 直到所有有序. 那么怎么实现基准后的元素左小右大呢, 可以用双指针的方法.

2. 算法实现

2.1 递归实现

void quikSort(vector<int>& nums, int start, int end) {if (start >= end)return;int mark = nums[start];int left = start + 1;int right = end;while (left < right) {if (nums[left] <= mark) {left ++;continue;}if (nums[right] >= mark) {right --;continue;}swap(nums[left], nums[right]);}if (nums[left] > mark)left --;swap(nums[start], nums[left]);quikSort(nums, start, left - 1);quikSort(nums, left + 1, end);
}
vector<int> sortArray(vector<int>& nums) {int n = nums.size();quikSort(nums, 0, n - 1);return nums;
}

2.2 迭代实现

vector<int> sortArray(vector<int>& nums) {int n = nums.size();if (n < 2)return nums;queue<pair<int, int>> sort_q;sort_q.push(make_pair(0, n - 1));while (!sort_q.empty()) {int start = sort_q.front().first;int end = sort_q.front().second;sort_q.pop();int left = start + 1;int right = end;while (left < right) {if (nums[left] < nums[start])left ++;else if (nums[right] > nums[start])right --;else {swap(nums[left], nums[right]);}}if (nums[left] > nums[start])left --;swap(nums[start], nums[left]);if (left - 1 > start)sort_q.push(make_pair(start, left - 1));if (left + 1 < end)sort_q.push(make_pair(left + 1, end));}return nums;
}

排序算法 --- 快速排序相关推荐

  1. 排序算法 | 快速排序,算法的图解、实现、复杂度和稳定性分析与优化

    今天讲解一下快速排序算法的原理以及实现.复杂度和稳定性分析与优化 目录 1 快速排序的原理 2 快速排序代码实现 3 复杂度和稳定性分析.优化 4 习题练习 1 快速排序的原理 快速排序是所有内部排序 ...

  2. 排序算法 快速排序 python 0913

    排序算法 快速排序 python 0913 快速排序 思路 定义快排方法 接收参数:原始列表,起始位置,终止位置 判断是否符合快排条件,当起始下标与终止下标相等时,代表只有一个元素,无法排序,退出 一 ...

  3. 排序算法 快速排序【详细步骤图解】

    排序算法 快速排序[详细步骤图解] 快速排序 主要思想 图解 第一轮分割序列 第二轮分割序列 --- 左子序列 小结 第三轮分割序列 --- 右子序列 C++实现 总结 快速排序 给定一个序列:22 ...

  4. 【图解算法】排序算法——快速排序

    简介 首先还是得简单的介绍一下快速排序这个算法. 快速排序(Quicksort),又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出.在平均状况下, ...

  5. JavaScript的排序算法——快速排序

    排序算法(Sorting algorithm)是计算机科学最古老.最基本的课题之一.要想成为合格的程序员,就必须理解和掌握各种排序算法. 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排 ...

  6. 十大经典排序算法-快速排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  7. 排序算法---快速排序(java版)

    快速排序 原理 快速排序(Quick Sort)算法,简称快排,利用的也是分治的思想,快排的思路是:如果要对 m->n 之间的数列进行排序,我们选择 m->n 之间的任意一个元素数据作为分 ...

  8. 实现快速排序的算法_排序算法-快速排序

    快速排序是由东尼霍尔所发展的一种排序算法.在平均n个项目要Ο(nlogn) 次比较.在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见.事实上,快速排序通常明显比其他 Ο(nlogn) 算法更 ...

  9. 排序算法 —— 快速排序

    快速排序算法介绍 划分问题:把数组的各个元素重排后分成左右两个部分,使得左边任意元素都小于或等于右边任意元素. 递归求解:把左右两部分分别排序. 快速排序代码 #include <iostrea ...

  10. 排序算法--快速排序

    快速排序:快速排序(Quicksort)是对冒泡排序的一种改进.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部 ...

最新文章

  1. 如何使用OpenCV自动校正文本图像
  2. 计算机aoa综合题word,AOA-word综合题操作步骤(修正版)
  3. Intellij IDEA 使用Spring-boot-devTools无效解决办法
  4. Web应用主动侦测工具Skipfish
  5. 白盒测试有哪些方法_QA测试开发常考的面试题+答案汇总(持续更新)
  6. SpringBoot-MyBatis
  7. OO真经——关于面向对象的哲学体系及科学体系的探讨(下)
  8. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1103:陶陶摘苹果
  9. spark出现bytes consumed error的问题
  10. Android之实现夸克浏览器书签和历史页面滑动时候右上角图标切换效果
  11. python三维数据增强_python图像数据增强——imgaug (三)
  12. 用python写一个除法的函数_2、Python基础--除法、常用数学函数
  13. 显示图片_Pycharm图片独立显示与imshow()无法显示
  14. 在Ubuntu安装QT及相关环境配置
  15. 3dmax材质丢失插件_3dmax找丢失贴图的材质插件怎么用
  16. Android包体积优化
  17. 学python用linux_用树莓派学习Linux及Python真的高效吗?
  18. 小爱同学服务器响应,小爱同学反应慢
  19. 树莓派4支持多大tf卡_树莓派入门指南(Raspberry Pi)
  20. python 方差_python 方差_python 方差齐性检验_方差 python - 云+社区 - 腾讯云

热门文章

  1. java中位数_java 计算中位数方法
  2. 算子基本思想_2.2 量子力学基本假设 Part 2
  3. python语言设计学习方向_学好Python开发就业方向有哪些?
  4. date js 半年_js Date 日期使用上的一个坑
  5. 删除当前文件夹下特定名称文件
  6. Struts2基础知识
  7. Firefox、Chrome 盘助手
  8. Consolidate Duplicate Conditional Fragments(合并重复的条件片段)
  9. checksum命令 linux_linux命令详解:md5sum命令
  10. python脚本自动统计excel_python脚本实现-excel二级统计