快速排序是所有排序里最受欢迎的排序算法,时间复杂度O(NlogN),如果测试数据是有序的话,时间复杂度会下降到线性,也就是O(N^2),算法的核心思想是:挖坑填数。算法代码一般采用递归的形式。
算法思想:
找到一个基准数,也叫哨兵,在我的代码中为temp,用这个基准数去比较其他的所有数字,如果是从小到大排序的话,就让基准数左边的数都小于它,右边的数都大于它,如果是从大到小的话,反之。然后再把它左边的数再这样操作一遍,右边的数也这样操作一遍,依次递归,直到整个数字集合里只剩下一个数,则默认为这个数是有序的,返回。
举个例子:
共有5个数,分别为1 5 2 4 3.
第一次操作,操作的数分别为1 5 2 4 3。默认基准数为第一个数,或者或者随便什么一个数,这里默认为第一个数。第一个数为1,它右边的数都大于它,所以第一次操作的结果为:1 5 2 4 3.
第二次操作,因为1的左边没有数,直接退出。
第三次操作,操作的数分别为5 2 4 3。选基准数为5,5是最大的,所以第三次的操作结果为:2 4 3 5。
第四次操作,操作的数分别为2 4 3,。选基准数为2,2是最小的,所以第四次的操作结果为:2 4 3。
第五次操作,因为5是最大的,右边没有数,直接退出。
第六次操作,操作的数分别分为4 3,选基准数为4,操作结果为:3 4。
第六次操作,因为4左边没有数,退出。
第七次操作,操作的数为3,只有一个数,默认有序,退出。
代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>int num[1001];void q_sort(int l,int r)
{if(l>r)return;int i = l,j = r;int temp = num[i];while(i!=j){while(i<j&&num[j]>=temp)j--;while(i<j&&num[i]<=temp)i++;if(i<j)std::swap(num[i],num[j]);}num[l] = num[i];num[i] = temp;q_sort(l,i-1);q_sort(i+1,r);
}int main()
{int n;std::cin>>n;for(int i = 0;i<n;i++)std::cin>>num[i];q_sort(0,n-1);for(int i = 0;i<n;i++)std::cout<<num[i]<<" ";return 0;
}

转载于:https://www.cnblogs.com/powerLEO101/p/7695190.html

分治算法——快速排序相关推荐

  1. 快速排序 c++_算法浅谈——分治算法与归并、快速排序(附代码和动图演示)

    本文始发于个人公众号:TechFlow 在之前的文章当中,我们通过海盗分金币问题详细讲解了递归方法. 我们可以认为在递归的过程当中,我们通过函数自己调用自己,将大问题转化成了小问题,因此简化了编码以及 ...

  2. 排序中减治法算法伪代码_算法浅谈——分治算法与归并、快速排序(附代码和动图演示)...

    在之前的文章当中,我们通过海盗分金币问题详细讲解了递归方法. 我们可以认为在递归的过程当中,我们通过函数自己调用自己,将大问题转化成了小问题,因此简化了编码以及建模.今天这篇文章呢,就正式和大家聊一聊 ...

  3. 分治策略——快速排序、幂乘算法、芯片测试、改进分治算法的途径

    思想:用首元素作为划分标准,设定两个指针,分别从第二个元素和最后一个元素分别往前往后遍历. 当前指针找到大于标准.后指针找到小于标准的时候,互换两个指针处的元素.从而将问题划分为两个子问题. 在递归调 ...

  4. 漫画:5分钟弄懂分治算法!它和递归算法的关系!

    分治顾名思义"分而治之",英文的意思翻译为"分割并征服". 分治思想,简而言之就是将原问题分解成与"原问题相同但是规模更小"的子问题,并可以 ...

  5. 三十三、分治算法---汉诺塔问题

    一.分治算法的介绍 分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或 相似的子问题,再把子问题分成更小的子问题--直到最后子问题可以 ...

  6. python分治算法_python算法实现-分治法

    分治法概念将一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题----"分" 将最后子问题可以简单的直接求解----"治" 将所有子问 ...

  7. 「五大常用算法」一文图解分治算法和思想

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 前言 分 ...

  8. java分治_【Java算法】什么是分治算法?

    1.什么是分治算法? 分治法(Divide-and-Conquer)是一种很重要的算法. 分治就是"分而治之"的意思,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子 ...

  9. NOIP训练营集训笔记—信息学基础算法(倍增与分治算法

      本文摘自清北OI学堂内部笔记,作者潘恺璠,来自柳铁一中曾参加过清北训练营提高组精英班,主要记录的是信息学基础算法.笔记非常详细,特分享给大家! NOIP2019年夏令营正在报名中,6大校区10种班 ...

最新文章

  1. java多线程(三)
  2. Qt Style Sheets(qt样式表)
  3. poj 1741 Tree
  4. 释疑の采购Invoice常用参数设置
  5. python列表按照批次分配数据(亲测)
  6. 《剑指offer》合并两个排序的链表
  7. 中如何将方形图片转换成圆形图片_【PS】PS中不可不知的实用技巧!你都掌握了吗?...
  8. 2d Laser 和 camera 标定工具原理及使用方法
  9. Processing编程学习指南1.5 颜色透明度
  10. python常用代码大全-Python常用库大全及简要说明
  11. 2022-08-26 Unity视频播放3——VideoPlayer
  12. xbox360使用_适用于Xbox 360的HD-DVD Player
  13. 一款基于TCP协议/Netty框架开发的一款基本简单的屏幕共享软件(局域网内)
  14. 论文翻译:2021_Towards model compression for deep learning based speech enhancement
  15. 我和你,不是影子一样的朋友,只在光明的日子里相随
  16. 智己汽车,兼顾豪华舒适和操控性能
  17. torch.sum(),dim=0,dim=1解析
  18. PostgreSQL是世界上最好的数据库
  19. 计算机视觉(相机标定;内参;外参;畸变系数)
  20. android邮箱附件传输,Android上发送带附件的邮件

热门文章

  1. 13.无名管道通讯编程
  2. eclipse 版本 查看
  3. escape encodeURI 和encodeURIComponent JS编码
  4. 今天终于辞职,投奔SoftBank
  5. HTTP1.0、HTTP1.1和HTTP2.0
  6. JavaScript学习(四十九)—构造方法、原型、对象图解
  7. python pandas series_Python数据分析-pandas之Series
  8. 485串口测试工具软件_探索者 STM32F407 开发板资料连载第三十一章 485 实验
  9. 手机有信号但是连不上网是怎么回事?
  10. 作为餐饮店长最需要什么能力?