一、学习要点:
1.先从数列中选取一个数作为基准数。
2.利用区分过程,为这个数确定在排序后数组的位置,区分过程为,比这个数大的数全放到他的右边,小于或等于这个数的数放到他的左边;
3.在对左右区间重复第二步,知道个区间只有一个数。
4.如果这个数组有10个数,第二步将执行十次,每次的复杂度为logn,总复杂度为O(nlogn),因为每执行一次区间排序可为数组中一个元素确定该元素在排序后的位置;
注:每走一趟的思维(挖坑填数)如下:
1.i=L;j=R;将基准数挖出形成第一个坑a[i].
2.j–由后向前找比他小的数,直到找到比他小,找到后挖出此数填前一个坑a[i]中。
3.i++由前向后找到比它大的数,找到后也挖出此数填到前一个坑a[j]中。
4.在重复执行2、3两步,直到i==j,将基准数填入a[i]中。
二、实现代码:

#include<iostream>
using namespace std;
//函数声明
void quicksort(int a[],int l,int r);
int main(){return 0;
}
//函数的定义
void quicksort(int a[],int l,int r){
//递归体   if(l<r){int i=l,j=r,x=a[l];while(i<j){while(i<j&a[j]>x){j--;}if(i<j){a[i++]=a[j];}while(i<j&a[i]<x){i++;}if(i<j){a[j--]=a[i]}}a[i]=x;//每次走一趟确定一个;quicksort(a,l,i-1);quicksort(a,i+1,r);}
//递归头
//l=r
}

三、程序运行结果图:

四、注意事项:
1.每次走完一趟后要确定一个元素在排序后数组中的位置;
2.利用填坑的思维而不是数组元素的交换(在每走一趟的过程中)
喜欢请点赞 谢谢


具体matlab代码参考:https://download.csdn.net/download/fyf18845165207/10886708

快速排序的C++实现(利用二分分治法)相关推荐

  1. 深大算法设计与分析实验二——分治法求最近点对问题

    源代码: 深大算法设计与分析实验二--分治法求最近点对问题代码-C/C++文档类资源-CSDN下载 目录 实验问题 一.实验目的: 二.内容: 三.算法思想提示 产生不重复的随机点算法: 蛮力算法: ...

  2. C++利用二次探查实现存储机制hash table的算法(附完整源码)

    C++利用二次探查实现存储机制hash table的算法 C++利用二次探查实现存储机制hash table的算法完整源码(定义,实现,main函数测试) C++利用二次探查实现存储机制hash ta ...

  3. java二维数组水平翻转,C 语言 利用二维数组实现对输入的数组进行翻转

    C 语言 利用二维数组实现对输入的数组进行翻转(帮助理解对图像翻转编辑原理) /* ?输入几行几列数字和翻转方式,如: 3 4 0即代表3行4列,左右翻转: 6 5 1即代表6行5列,上下翻转. 输入 ...

  4. 利用二维数组实现一个矩阵类:Matrix

    利用二维数组实现一个矩阵类:Matrix.要求提供以下操作: (1)set(int row, int col, double value):将第row行第col列的元素赋值为value: (2)get ...

  5. 利用二维数组(double[])实现一个矩阵类:Matrix。要求提供以下方法:(1)set(int row, int col, double value):将第row行第col列的元素赋值为valu

    利用二维数组(double[])实现一个矩阵类:Matrix.要求提供以下方法:(1)set(int row, int col, double value):将第row行第col列的元素赋值为valu ...

  6. 利用二维码进行市场推广的十大新玩法

    原文:http://www.36kr.com/p/77386.html 本文作者Ekaterina Walter是Intel的社会化媒体专家,也是Intel卓越社交媒体中心(Intel's Socia ...

  7. 如何利用二维码分享会议资料

    iamlaosong文 在当今智能手机普及年代,完全可以利用手机接收会议资料.当然方式有很多种,电子邮件.QQ群共享等都可以.这儿说一个将资料存放到云盘,再利用二维码分享的方式.这种方式方便,迅速,无 ...

  8. 如何利用二维码来提升你的店铺销量?

    从每年的618.双12 这些购物狂欢节不断攀升的巨额成交数据不难看出,网上购物越来越受欢迎了. 这让无数人看到了其中蕴藏的巨大商机,纷纷入驻各大电商平台.但是随着平台商家的不断增加,竞争也愈加激烈. ...

  9. JAVA利用二维数组横版和竖版输出古诗

    平台:java eclipse 内容:利用二维数组分别横版和竖版输出杜牧的古诗<有寄>. 知识点: 1.创建二维数组两种方式 (1)声明二维数组语法: 数组元素的类型 数组名字[][]; ...

最新文章

  1. 内存性能参数详解(转载)
  2. 《大话设计模式》勘误
  3. Vue.js 状态管理
  4. linux 环境下配置ftp服务器
  5. ewebeditor遍历路径漏洞
  6. 批量获取远程计算机MAC
  7. 谈谈分布式事务(Distributed Transaction)[共5篇]
  8. .NET 6新特性试用 | PriorityQueue
  9. 五分钟彻底学会iptables防火墙--技术流ken
  10. kali linux 桌面消失_Kali Linux添加桌面快捷方式
  11. ctf xss利用_Csrf+Xss组合拳
  12. fluidsim元件库下载_FluidSIM5|FluidSIM(液压气动仿真软件)下载 v5.0中文免费版 附安装教程 - 121下载站...
  13. 薄膜单点压力传感器的制作
  14. 互联网公司怪相:一边裁员,一边忙着做慈善
  15. 使用聚合数据接口发送短信
  16. bzoj4200: [Noi2015]小园丁与老司机(可行流+dp)
  17. PDO简介及其基本使用
  18. 题目描述:编写一个SQL查询,删除学生表中,学号重复的学生信息,重复的学生信息中只保留id最大的那个
  19. 用HBuild生成APP启动页面准备
  20. 项目优化:当使用redis减少数据库压力时,遇到redis写入失败,造成读取数据问题的解决方案

热门文章

  1. boost::math模块非有限信号 NaN 环回测试
  2. boost::json::to_string用法的测试程序
  3. boost::make_reverse_graph用法的测试程序
  4. boost::isomorphism用法的测试程序
  5. boost::gil::rgb8_image_t::recreate用法的测试程序
  6. boost::fusion::repetitive_view用法的测试程序
  7. boost::to_address用法实例
  8. boost::core模块实现分配构造throws
  9. Boost:bind绑定查找问题的测试程序
  10. Boost:aligned alloc对齐分配的测试程序