快速排序——主要思想是分治

​ 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。

1.确定分界点 q[l] q[(r+l)/2] q[r] 随机选一个,选择好了之后将区间分为两部分

2.调整区间,将小于等于x的置于左边,大于等于x的置于右边,这里需要注意,如果等于x,放在左边或者右边都可以

3.使用递归处理左右两段

可以使用两个指针i,j,指针i置于左边,指针j置于右边,首先将i指针一直往右移动直到遇到大于等于x的数停下来,接着就轮到指针j向左边移动,直到遇到小于等于x的数停下来,最后使用swap交换两个指针的值

当两个指针相遇或者穿过的时候即完整需求

#include<iostream>using namespace std;const int N=1e6+10;
int n;
int q[N];
void quick_sort(int q[],int l,int r){if(l>=r) return;int x=q[l],i=l-1,j=r+1;while(i<j){do i++; while(q[i]<x);do j--; while(q[j]>x);if(i<j) swap(q[i],q[j]);}quick_sort(q,l,j); quick_sort(q,j+1,r);
}int main(){scanf("%d",&n);for(int i=0;i<n;i++) scanf("%d",&q[i]);quick_sort(q,0,n-1);for(int i=0;i<n;i++) printf("%d ",q[i]);
}

快速排序——主要思想是分治相关推荐

  1. 借鉴快速排序的思想,实现算法将整型数组a[0...n]分成两块,使得第一块元素均大于等于0,第二块的元素均小于0,要求算法原地工作且时间复杂度为O(n)

    题目:借鉴快速排序的思想,实现算法将整型数组a[0...n]分成两块,使得第一块元素均大于等于0,第二块的元素均小于0,要求算法原地工作且时间复杂度为O(n) 完整代码实现: #include< ...

  2. 快速排序算法思想及实现

    简介 快速排序是对冒泡排序的一种改进,是一种分治算法,时间复杂度为O(nlogn) 基本思想 先从数列中取出一个数作为基准数. 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边 ...

  3. 分治法的关键特征_经典算法思想2——分治(Divide-and-Conquer)

    分治法,字面意思是"分而治之",就是把一个复杂的1问题分成两个或多个相同或相似的子问题,再把子问题分成更小的子问题直到最后子问题可以简单地直接求解,原问题的解即子问题的解的合并,这 ...

  4. c语言动态规划回溯的原理,「算法思想」分治、动态规划、回溯、贪心一锅炖...

    观感度:????? 口味:东北一锅出 烹饪时间:10min 本文已收录在Github github.com/Geekhyt,感谢Star. 数据结构与算法系列专栏第四弹来袭,往期专栏链接如下: 初学者 ...

  5. 快速排序法(思想及代码实现)

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

  6. 【数据结构与算法】【算法思想】分治算法

    贪心算法 回溯算法 分治算法 动态规划 MapReduce本质就是分治算法,是Google大数据处理的三驾马车之一,另外两个是GFS和Bigtable.它在倒排索引,PageRank计算,网页分析等搜 ...

  7. 分治法 —— 快速排序(递归,迭代,非递归)

    快速排序 快速排序三种方法,你值得参考!!! 快速排序 1,快速排序之递归 Code 递归 2,快速排序之迭代 Code 迭代 3,快速排序之非递归 Code 非递归 4,结语 快速排序在所有排序中基 ...

  8. 面试题总结-搜狐手机网Python开发工程师

    1.Python中range()和xrange()区别? xrange()不会生成一个长列表,而是产生一个生成器 2.Python装饰器? 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较 ...

  9. 算法原理:大数据处理的分治思想!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:周彬莲,东北石油大学,Datawhale优秀学习者 引言 MapR ...

最新文章

  1. linux bash基础
  2. Yinchuan-B The Great Wall
  3. PAT:1042. Shuffling Machine (20) AC
  4. 探讨Express Router Route
  5. C#中HttpClient使用注意:预热与长连接
  6. 验证身份证合法性的js
  7. 【nodejs原理源码赏析(6)】深度剖析cluster模块源码与node.js多进程
  8. php抽奖实现-概率算法
  9. 『IT视界』 [互联网]联想裁员千人不影响国内业务 每年节约2.5亿
  10. FIL能涨到多少?2021FIL价格预测
  11. tomcat 配置域名和ssl证书
  12. 多多进鱼带VUE源码-任务悬赏网站源码-活动营销三级分销返佣积分商城版
  13. 基于Huggingface的预训练语言模型分类体系及实战
  14. C语言 实现十进制转二十六进制
  15. 基于ug的框架断路器抽屉座运动仿真
  16. 软件测试需求评审目的,需求评审的重要性
  17. 双向可控硅触发电路的设计方案
  18. DNS劫持,HTTP劫持、HTTPS劫持【流量劫持】
  19. LINUX------给系统加磁盘
  20. 【雕爷学编程】Arduino动手做(102)---TM1638按键数码管

热门文章

  1. MEF入门之不求甚解,但力求简单能讲明白(四)
  2. Code Style Guidelines for Contributors Reading Notes
  3. 文本信息检索(维基百科)
  4. Linux系统多网卡环境下的路由配置
  5. 使用Javascript在Leetcode中的ACM模式下无法获取输入数据的问题
  6. Ubuntu14.04安装build-essential失败,包依赖问题如何解决?
  7. 一个Https网站发送Http的 ajax请求的解决方法
  8. 在maven项目中解决第三方jar包依赖的问题
  9. eslint 验证vue文件 报错 unexpected token =解决方法
  10. Express-js无法获取我的静态文件,为什么?