快速排序——主要思想是分治
快速排序——主要思想是分治
分治算法的基本思想是将一个规模为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]);
}
快速排序——主要思想是分治相关推荐
- 借鉴快速排序的思想,实现算法将整型数组a[0...n]分成两块,使得第一块元素均大于等于0,第二块的元素均小于0,要求算法原地工作且时间复杂度为O(n)
题目:借鉴快速排序的思想,实现算法将整型数组a[0...n]分成两块,使得第一块元素均大于等于0,第二块的元素均小于0,要求算法原地工作且时间复杂度为O(n) 完整代码实现: #include< ...
- 快速排序算法思想及实现
简介 快速排序是对冒泡排序的一种改进,是一种分治算法,时间复杂度为O(nlogn) 基本思想 先从数列中取出一个数作为基准数. 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边 ...
- 分治法的关键特征_经典算法思想2——分治(Divide-and-Conquer)
分治法,字面意思是"分而治之",就是把一个复杂的1问题分成两个或多个相同或相似的子问题,再把子问题分成更小的子问题直到最后子问题可以简单地直接求解,原问题的解即子问题的解的合并,这 ...
- c语言动态规划回溯的原理,「算法思想」分治、动态规划、回溯、贪心一锅炖...
观感度:????? 口味:东北一锅出 烹饪时间:10min 本文已收录在Github github.com/Geekhyt,感谢Star. 数据结构与算法系列专栏第四弹来袭,往期专栏链接如下: 初学者 ...
- 快速排序法(思想及代码实现)
快速排序思想: 快速排序是对冒泡排序的一种改进,基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对着两部分数据分别进行快速排 ...
- 【数据结构与算法】【算法思想】分治算法
贪心算法 回溯算法 分治算法 动态规划 MapReduce本质就是分治算法,是Google大数据处理的三驾马车之一,另外两个是GFS和Bigtable.它在倒排索引,PageRank计算,网页分析等搜 ...
- 分治法 —— 快速排序(递归,迭代,非递归)
快速排序 快速排序三种方法,你值得参考!!! 快速排序 1,快速排序之递归 Code 递归 2,快速排序之迭代 Code 迭代 3,快速排序之非递归 Code 非递归 4,结语 快速排序在所有排序中基 ...
- 面试题总结-搜狐手机网Python开发工程师
1.Python中range()和xrange()区别? xrange()不会生成一个长列表,而是产生一个生成器 2.Python装饰器? 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较 ...
- 算法原理:大数据处理的分治思想!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:周彬莲,东北石油大学,Datawhale优秀学习者 引言 MapR ...
最新文章
- linux bash基础
- Yinchuan-B The Great Wall
- PAT:1042. Shuffling Machine (20) AC
- 探讨Express Router Route
- C#中HttpClient使用注意:预热与长连接
- 验证身份证合法性的js
- 【nodejs原理源码赏析(6)】深度剖析cluster模块源码与node.js多进程
- php抽奖实现-概率算法
- 『IT视界』 [互联网]联想裁员千人不影响国内业务 每年节约2.5亿
- FIL能涨到多少?2021FIL价格预测
- tomcat 配置域名和ssl证书
- 多多进鱼带VUE源码-任务悬赏网站源码-活动营销三级分销返佣积分商城版
- 基于Huggingface的预训练语言模型分类体系及实战
- C语言 实现十进制转二十六进制
- 基于ug的框架断路器抽屉座运动仿真
- 软件测试需求评审目的,需求评审的重要性
- 双向可控硅触发电路的设计方案
- DNS劫持,HTTP劫持、HTTPS劫持【流量劫持】
- LINUX------给系统加磁盘
- 【雕爷学编程】Arduino动手做(102)---TM1638按键数码管
热门文章
- MEF入门之不求甚解,但力求简单能讲明白(四)
- Code Style Guidelines for Contributors Reading Notes
- 文本信息检索(维基百科)
- Linux系统多网卡环境下的路由配置
- 使用Javascript在Leetcode中的ACM模式下无法获取输入数据的问题
- Ubuntu14.04安装build-essential失败,包依赖问题如何解决?
- 一个Https网站发送Http的 ajax请求的解决方法
- 在maven项目中解决第三方jar包依赖的问题
- eslint 验证vue文件 报错 unexpected token =解决方法
- Express-js无法获取我的静态文件,为什么?