算法设计与分析——递归与分治策略——快速排序
快速排序——递归算法
处理i,j的先后顺序不能改变
快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
函数:
partition()函数实现了根据数组第一个元素区分这个数组,比这个元素小的放到mid的前面,比这个元素大的放到mid的后面
quicksort()函数:实现了递归调用
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
vector<int> vec;
int partition(vector<int> &vec,int left,int right);
void QuickSort(vector<int> &vec,int left,int right)
{if(left<right){int mid = partition(vec, left, right);QuickSort(vec, left, mid-1);QuickSort(vec, mid + 1, right);}}
int partition(vector<int> &vec,int left,int right)
{int i=left, j=right;int temp = vec[left];while(i<j){while(temp<=vec[j]&&i<j)//处理i,j的先后顺序不能改变 {j--;}while(vec[i]<=temp&&i<j)//处理i,j的先后顺序不能改变 {i++; }swap(vec[i],vec[j]);}vec[left] = vec[j];vec[j] = temp;return j;}int main()
{vector<int> vec={6,1,2,7,9,3,4,5,10,8};cout<<"排序前的序列:";for (auto a:vec){cout << a<<" ";}cout<<endl<<"排序后的序列:";int count = vec.size()-1;QuickSort(vec, 0, count);for (auto a:vec){cout << a<<" ";}cout<<endl;system("pause");return 0;
}
算法设计与分析——递归与分治策略——快速排序相关推荐
- 算法设计与分析——递归与分治策略——全排列
算法设计与分析--递归与分治策略--全排列 全排列问题的解决是通过分治与递归思想来解决的 首先判断是否递归到了最后一位,如果递归到了最后一位,则输出他当前的全排列序列. 如果没有到达最后一位,则循环的 ...
- 算法设计与分析——递归与分治策略——最接近点对问题
[问题描述] 最近对问题要求在包含有n个点的集合S中,找出距离最近的两个点.设 p1(x1,y1),p2(x2,y2),--,pn(xn,yn)是平面的n个点. 严格地将,最近点对可能不止一对,此例输 ...
- 算法设计与分析——递归与分治策略——线性时间选择
顾名思义:这篇文章讲解的就是如果用线性时间算法来作出元素选择问题. 问题描述:给定线性序集中n个元素和一个整数k,1<=k<=n.要求找出这n个元素中第k小的元素,即如果将这个n个元素依其 ...
- 算法设计与分析——递归与分治策略——棋盘覆盖
问题描述 棋盘覆盖问题要求在2^k * 2^k 个方格组成的棋盘中,你给定任意一个特殊点,用一种方案实现对除该特殊点的棋盘实现全覆盖. 建立模型如图: 解决方案就是利用分治法,将方形棋盘分成4部分,如 ...
- 算法设计与分析——递归与分治策略——循环日程赛
问题描述: 非递归方案一:代码 #include<bits/stdc++.h> using namespace std;void gameTable(vector<vector< ...
- 【算法设计与分析】16 分治策略:快速排序(快速排序的时间复杂度计算)
上一篇文章学习了:[算法设计与分析]15 分治策略:芯片测试 文章目录 1. 快速排序的基本思想 1.2 时间复杂度的计算 1.21 最坏情况时间复杂度计算 1.22 最好情况时间复杂度 1.23 平 ...
- 【算法设计与分析】15 分治策略:芯片测试
上一篇文章学习了[算法设计与分析]14 分治算法的一般描述和分析方法 文章目录 1. 芯片测试 1.1 一次测试的过程 1.2 如何测试一块芯片的好坏 1.3 蛮力算法 1.4 分治算法设计思想 1. ...
- 【算法设计与分析】13 分治策略的设计思想
算法中很多方法都是可以采用分治策略进行设计与优化,那么什么是分治策略?如何使用分治策略进行算法的设计与分析? 文章目录 1. 分治策略的基本思想 1.1 二分检索的设计思想 1.2 二分归并排序的设计 ...
- 算法设计与分析——递归与分治——归并排序
归并排序采用的是一种分治的思想,如下图,先将要排序的元素分为两块,每个块又开始分裂,然后逐个按照特定顺序合并,合成最后我们需要的数组. 归并排序的复杂度: 时间复杂度:O(nlogn) 空间复杂度:O ...
最新文章
- 从冲撞避让到碾压,竞争模式发生了改变
- Zuul spring cloud zuul com.netflix.zuul.exception.ZuulException GENERAL解决方案
- das服务器未响应是怎么回事,google-chrome - WSO2 Data Analytics Server-Analytics仪表板视图功能未响应任何浏览器 - 堆栈内存溢出...
- python3转为unicode编码_「小技能get记」· 如何用python3解码unicode
- leetcode 402. Remove K Digits | 402. 移掉 K 位数字(单调栈)
- 续上篇---shiro从数据库获取动态权限-cjq
- MySQL根据员工姓名所在部门_用一条SQL语句显示所有人员的姓名及所在部门
- MZOJ 1345 hero
- Maven入门详解与安装配置
- 服务器密码过期了咋修改,重置已过期的密码 (Sun Java System Directory Server Enterprise Edition 6.3 管理指南)...
- Greenplum 实时数据仓库实践(5)——实时数据同步
- 酷狗音乐网站前端JS的逆向过程
- 播放量破4亿。《梦华录》创2022年国产剧豆瓣最高开分,它凭何爆火?
- 图灵机的逻辑等价形式——lambda演算简介
- What is road rage?
- android webview无法显示H5中的图片
- STK Components规格书
- 2011年3月份优秀PPT资源分享
- Node.js实现网络新闻爬虫及搜索功能(一)
- 256种编程语言的大清单
热门文章
- Microsoft将在UWP上支持React Native,同时为VS Code添加工具软件
- C# RichTextBox 做简单的HTML代码编辑器 ---------利用WinApi修正左侧显示行号 误差
- 【ArcGIS遇上Python】从入门到精通系列之第一章:ArcGIS Python简介
- 【遥感物候】Matlab求解一元六次多项式,计算植被生长季始期
- Android之打开继承DialogFragment对话框里面EditText获取光标并且弹出键盘把底部布局顶上去
- Android之app作为服务器解决跨域问题
- php基础教程 第十一步 面向对象补充
- 【一】Windows API 零门槛编程指南——MessageBox 基本使用及基础讲解
- ctf镜子里面的世界_帮大爷干活,他送了我一只鞋子和一手套,又不能穿拿来做什么?哈哈哈|叶子|镜子|虫子|鞋子|棺材...
- 尾调用优化 java_为什么JVM仍然不支持尾调用优化?