快速排序——递归算法
处理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;
}

算法设计与分析——递归与分治策略——快速排序相关推荐

  1. 算法设计与分析——递归与分治策略——全排列

    算法设计与分析--递归与分治策略--全排列 全排列问题的解决是通过分治与递归思想来解决的 首先判断是否递归到了最后一位,如果递归到了最后一位,则输出他当前的全排列序列. 如果没有到达最后一位,则循环的 ...

  2. 算法设计与分析——递归与分治策略——最接近点对问题

    [问题描述] 最近对问题要求在包含有n个点的集合S中,找出距离最近的两个点.设 p1(x1,y1),p2(x2,y2),--,pn(xn,yn)是平面的n个点. 严格地将,最近点对可能不止一对,此例输 ...

  3. 算法设计与分析——递归与分治策略——线性时间选择

    顾名思义:这篇文章讲解的就是如果用线性时间算法来作出元素选择问题. 问题描述:给定线性序集中n个元素和一个整数k,1<=k<=n.要求找出这n个元素中第k小的元素,即如果将这个n个元素依其 ...

  4. 算法设计与分析——递归与分治策略——棋盘覆盖

    问题描述 棋盘覆盖问题要求在2^k * 2^k 个方格组成的棋盘中,你给定任意一个特殊点,用一种方案实现对除该特殊点的棋盘实现全覆盖. 建立模型如图: 解决方案就是利用分治法,将方形棋盘分成4部分,如 ...

  5. 算法设计与分析——递归与分治策略——循环日程赛

    问题描述: 非递归方案一:代码 #include<bits/stdc++.h> using namespace std;void gameTable(vector<vector< ...

  6. 【算法设计与分析】16 分治策略:快速排序(快速排序的时间复杂度计算)

    上一篇文章学习了:[算法设计与分析]15 分治策略:芯片测试 文章目录 1. 快速排序的基本思想 1.2 时间复杂度的计算 1.21 最坏情况时间复杂度计算 1.22 最好情况时间复杂度 1.23 平 ...

  7. 【算法设计与分析】15 分治策略:芯片测试

    上一篇文章学习了[算法设计与分析]14 分治算法的一般描述和分析方法 文章目录 1. 芯片测试 1.1 一次测试的过程 1.2 如何测试一块芯片的好坏 1.3 蛮力算法 1.4 分治算法设计思想 1. ...

  8. 【算法设计与分析】13 分治策略的设计思想

    算法中很多方法都是可以采用分治策略进行设计与优化,那么什么是分治策略?如何使用分治策略进行算法的设计与分析? 文章目录 1. 分治策略的基本思想 1.1 二分检索的设计思想 1.2 二分归并排序的设计 ...

  9. 算法设计与分析——递归与分治——归并排序

    归并排序采用的是一种分治的思想,如下图,先将要排序的元素分为两块,每个块又开始分裂,然后逐个按照特定顺序合并,合成最后我们需要的数组. 归并排序的复杂度: 时间复杂度:O(nlogn) 空间复杂度:O ...

最新文章

  1. 从冲撞避让到碾压,竞争模式发生了改变
  2. Zuul spring cloud zuul com.netflix.zuul.exception.ZuulException GENERAL解决方案
  3. das服务器未响应是怎么回事,google-chrome - WSO2 Data Analytics Server-Analytics仪表板视图功能未响应任何浏览器 - 堆栈内存溢出...
  4. python3转为unicode编码_「小技能get记」· 如何用python3解码unicode
  5. leetcode 402. Remove K Digits | 402. 移掉 K 位数字(单调栈)
  6. 续上篇---shiro从数据库获取动态权限-cjq
  7. MySQL根据员工姓名所在部门_用一条SQL语句显示所有人员的姓名及所在部门
  8. MZOJ 1345 hero
  9. Maven入门详解与安装配置
  10. 服务器密码过期了咋修改,重置已过期的密码 (Sun Java System Directory Server Enterprise Edition 6.3 管理指南)...
  11. Greenplum 实时数据仓库实践(5)——实时数据同步
  12. 酷狗音乐网站前端JS的逆向过程
  13. 播放量破4亿。《梦华录》创2022年国产剧豆瓣最高开分,它凭何爆火?
  14. 图灵机的逻辑等价形式——lambda演算简介
  15. What is road rage?
  16. android webview无法显示H5中的图片
  17. STK Components规格书
  18. 2011年3月份优秀PPT资源分享
  19. Node.js实现网络新闻爬虫及搜索功能(一)
  20. 256种编程语言的大清单

热门文章

  1. Microsoft将在UWP上支持React Native,同时为VS Code添加工具软件
  2. C# RichTextBox 做简单的HTML代码编辑器 ---------利用WinApi修正左侧显示行号 误差
  3. 【ArcGIS遇上Python】从入门到精通系列之第一章:ArcGIS Python简介
  4. 【遥感物候】Matlab求解一元六次多项式,计算植被生长季始期
  5. Android之打开继承DialogFragment对话框里面EditText获取光标并且弹出键盘把底部布局顶上去
  6. Android之app作为服务器解决跨域问题
  7. php基础教程 第十一步 面向对象补充
  8. 【一】Windows API 零门槛编程指南——MessageBox 基本使用及基础讲解
  9. ctf镜子里面的世界_帮大爷干活,他送了我一只鞋子和一手套,又不能穿拿来做什么?哈哈哈|叶子|镜子|虫子|鞋子|棺材...
  10. 尾调用优化 java_为什么JVM仍然不支持尾调用优化?