快速排序

1 算法介绍:

快速排序属于“交换类排序”,通过多次划分操作实现排序。接下来以升序为例介绍算法步骤。在一趟选择当前序列中的一个关键字(通常是第一个)作为中间轴,将当前序列中比中间轴小的元素移到中间抽左边,比中间轴大的元素移动到中间轴右边;当本趟结束后,当前序列中以中间轴为基准,被划分为两个子序列,左边子序列的元素都不大于中间轴,二右边的子序列的元素则都不小于中间轴。接下来再将这两个子序列分别重复以上步骤。

2算法执行流程

首先进行第一趟排序;
1.在开始是first,last分别指向序列的头元素和尾元素,以头元素为中间轴,用last开始从右往左开始扫描,直到遇到比中间轴小的元素,此时last指向该元素的下标;然后把该元素挪到first所指的位置上。
2.然后用first开始从左往右扫描,直到遇到比中间轴大的元素,此时first指向该元素的位置,然后将该元素挪到last所值的位置上去。
3.然后继续挪动last指针(即重复1步骤,然后重复2步骤,知道first指针和last指针相遇),这时将中间轴的元素放到该位置上;这样就完成了一趟划分。接下来分别对中间轴两边的两个子序列做同样的划分操作。

3代码实现

void quick_sort(vector<int>&v,int low,int hight)
{if(low>hight){return;}int first=low,last=hight,key=v[first];while(first<last){while(first<last&&v[last]>=key){--last; }v[first]=v[last];while(first<last&&v[first]<=key){++first;}v[last]=v[first];}v[first]=key;  quick_sort(v,low,first-1);quick_sort(v,first+1,hight);
}void printVector(vector<int>&v)
{for(auto it=v.begin();it!=v.end();it++)cout<<*it<<" ";
}
int main()
{vector<int>v={49,38,65,97,76,13,27,49};quick_sort(v,0,v.size()-1);printVector(v); return 0;}

4算法性能分析

4.1时间复杂度分析

快速排序最好的情况下的时间复杂度为O(nlog2(n)),待排序的序列越接近无序,本算法的效率越高。最坏的情况下的时间复杂度为O(n^2) ,待排序序列越接近有序本算法效率越低。平均情况下时间复杂度为O(nlog2(n)),快速排序的排序趟数和初始序列有关。

4.2空间复杂度

空间复杂度为O(log2(n)).快速排序是递归进行的,递归需要借助栈的辅助,因此它需要的辅助空间比前面几类排序算法大。

快速排序及其C++代码实现相关推荐

  1. 快速排序程序c语言,C语言实现的快速排序算法的代码

    工作期间,将开发过程中经常用到的代码片段记录起来,如下代码段是关于C语言实现的快速排序算法的代码,应该对各朋友也有用处. #include #include while(l--) { } } if ( ...

  2. 链表快速排序python_Python一行代码实现快速排序的方法

    今天将单独为大家介绍一下快速排序! 一.算法介绍 排序算法(Sorting algorithm)是计算机科学最古老.最基本的课题之一.要想成为合格的程序员,就必须理解和掌握各种排序算法.其中" ...

  3. java快速排序直观演示代码,排序算法总结(含动图演示和Java代码实现)

    本文将围绕冒泡排序.桶排序.计数排序.堆排序.插入排序.并归排序.快速排序和选择排序,按照描述.时间复杂度(最坏情况).动态图展示和代码实现来讲解.本文默认排序为从小到大. 本文相关代码已上传至git ...

  4. 经典算法(4)图解快速排序算法及代码实现

    写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...

  5. 快速排序-单边循环代码解析

    我们先来看代码 ps:本代码处理9个以下元素的数组时,报ArrayIndexOutOfBoundsException数组越界 public static void main(String[] args ...

  6. 《算法图解》学习笔记(四):分而治之和快速排序(附代码)

    欢迎关注WX公众号:[程序员管小亮] python学习之路 - 从入门到精通到大师 文章目录 欢迎关注WX公众号:[程序员管小亮] [python学习之路 - 从入门到精通到大师](https://b ...

  7. 快速排序(java代码实现)

    快速排序 思路 设置两个指针, 一个左指针,初始化指向数组的第一个位置(最左边的数),向右一个个遍历 一个右指针,初始化指向数组的最后一个位置(最右边的数),向左一个个遍历 设置最左边的数为基准位,目 ...

  8. 快速排序多种方法代码Python

    ''' 六.快速排序 QuickSort介绍: 快速排序通常明显比同为Ο(n log n)的其他算法更快,因此常被采用,而且快排采用了分治法的思想,所以在很多笔试面试中能经常看到快排的影子. 可见掌握 ...

  9. java 随机化快速排序,JS实现随机化快速排序的实例代码

    算法的平均时间复杂度为O(nlogn).但是当输入是已经排序的数组或几乎排好序的输入,时间复杂度却为O(n^2).为解决这一问题并保证平均时间复杂度为O(nlogn)的方法是引入预处理步骤,它惟一的目 ...

最新文章

  1. linux给所有主机发送公钥,发送公钥到多台远程主机
  2. 《HTML5多媒体应用开发》——第2章 HTML5多媒体元素2.1 Web多媒体历史
  3. Bootstrap全局css样式_表格
  4. python torch exp_学习Pytorch过程遇到的坑(持续更新中)
  5. MVC HtmlHelper listbox用法
  6. IEnumerable和IEnumerator
  7. 阿里云长视频上传以及返回播放地址
  8. 吉他录音混音教程入门|连这些录音知识都不懂,以后还怎么“混”?| MZD Studios
  9. 小米手机qq邮箱收件服务器,小米手机邮箱设置详细教程(各主流邮箱)
  10. 百度C++工程师的那些极限优化(内存篇)
  11. 计算机应用中双绞线细铜线几根,《计算机应用基础_在线作业_E100.doc
  12. 职场减压移魂大法几则 (转东转西)
  13. mappedBy和JoinColumn实质上指向的是同一个表即外键作为主键所在的表对应的实体
  14. Qt图片绘图类QPixmap、QImage、QPicture
  15. 业务+IT一体化就是BPO?
  16. echarts 绘制中国地图(中英文转换)
  17. 闪聚支付 第2章-对接SaaS以及用户认证OAuth2.0概述
  18. 寻找兼职电子工程师合作,大量项目急需外包派单
  19. 还在自学黑客?一般人我劝你还是算了吧!
  20. 华为云CentOS Linux release 7.7.1908 (Core)安装zeek-lts

热门文章

  1. 小数的初步认识ppt_【动态】配件分厂PPT软件技能专业培训
  2. naive-ui在setup引用message的方法
  3. CSI-RS和DMRS
  4. KDD99数据集标签详解
  5. 2023前端面试题汇总
  6. js API语音播报笔记
  7. 如何做一份高程分析图
  8. 西部数码服务器自动备份,西部数码虚拟主机网站数据备份教程步骤说明
  9. KerasClassifier 中verbose是什么
  10. HTML+CSS实现荧光效果