1、算法流程

(1)输入两个哨兵i,j,整个过程要一直保证i<j;

(1)从数组D中选择第一个数为基准数A=D[i];

(2)循环查找交换对,并交换,直到不满足i<j:

从i+1元素开始,向右查找大于A的数a(始终保证i<j);

从j元素查找小于A的数b(始终保证i<j),得到交换对(a,b),然后进行交换

(4)判断终止位置i=j的位置数值与基准数A是否需要交换,这样最后得到的就是A左边的数D1都是小于A的,A右边的数D2,都是大于A的。

(3)D1、D2继续选择基准数,进行递归(需要注意的是递归的D1、D2此时已经不包含基准数A)。

2、源码实现

#include <iostream>
#include<vector>
using namespace std;
void swap(int& a,int&b)
{int tmp=a;a=b;b=tmp;
}
void sort(int*sort_data,int start,int end)
{if (start>=end) return;int A=sort_data[start];//选择初始位置作为基数int i=start+1;//哨兵i,从第二个位置开始,从左向右int j=end;//哨兵j,从最后一个位置,从右向左while(i<j){while(A<sort_data[j]&&i<j)//哨兵j,从最后一个位置,从右向左j--;while(A>sort_data[i]&&i<j)//哨兵i,从第二个位置开始,从左向右i++;swap(sort_data[i],sort_data[j]);}if (sort_data[start]>sort_data[i])swap(sort_data[start],sort_data[i]);sort(sort_data,start,i-1);sort(sort_data,i+1,end);}
int main() {int data[14]={3,5,1,6,7,8,4,9,2,10,10,8,11,13};sort(data,0,13);for(int i=0;i<14;i++){std::cout<<data[i]<<std::endl;}return 0;
}

数据结构(一)快速排序相关推荐

  1. java数据结构之快速排序

    排序算法是java数据结构的基础,也是程序员必备的基础算法之一,个人认为,了解并掌握排序算法的思想比起单纯用代码实现功能更有意义,毕竟创造这套算法的思想才是最高的智慧嘛,下面就来说说关于排序算法中的比 ...

  2. 数据结构之快速排序算法(C语言版)

    快速排序是学习数据结构必须掌握的一种排序方法,效率很高,经过老师的讲解很想和大家分享~ 下面举一个例子来说明. 例如数组:19 6 3 78 34 10 一.找出枢轴并把数组划分成块,枢轴前面的都比枢 ...

  3. 【数据结构】快速排序

    从两种框架,三种思想来展开对快速排序的叙述 两种框架:递归与非递归 三种思想:左右交换法.挖坑法.前后指针法 但三种思想整体来说就是要找一个key值,把比key小的放在key左边,把比key大的放在k ...

  4. 算法与数据结构(快速排序)

    快速排序 Quick Sort 快速排序是对冒泡排序的一种改进 通过一趟排序将序列分为两个部分,其中一个部分的所有数据比另一个部分的所有数据都小,然后再分别对两个部分进行类似操作(递归),直到整个序列 ...

  5. 数据结构之快速排序图文详解及代码(C++实现)

    代码: #include<iostream> using namespace std; #define MAXSIZE 20//顺序表的最大长度 typedef int KeyType;/ ...

  6. 【数据结构】——快速排序

    目录 一.代码 二.复杂度:O(nlog(n)) 三.快速排序的劣势 视频参考链接:https://www.bilibili.com/video/BV1mp4y1D7UP?p=17 一.代码 ''' ...

  7. 【数据结构】快速排序非递归算法及其改进

    在学数据结构中排序这一章节的时候,有一道有关快速排序的作业题描述如下: 按下述要求编写快速排序的非递归算法: 定义一个栈(或队列),把整个序列的上.下界入栈(或队列).当栈(或队列)非空时进行如下操作 ...

  8. 【恋上数据结构】快速排序

    快速排序 前言 快速排序 轴点构造 构造轴点-代码实现 构造轴点-优化 思考?与轴点相等的元素 快速排序完整代码 复杂度与稳定性 经典的十大排序算法! 前言 请务必看一下这个:排序算法前置知识+代码环 ...

  9. 【数据结构】快速排序详解

    目录 一.基本介绍 二.快排的实现 1. 调试环境 2.快排的单趟排序 (1)Hoare版本 (2)挖坑法 (3)前后指针法 2.递归过程 三.快排的优化 1. 优化取key方式,防止栈溢出 2. 小 ...

  10. 严蔚敏《数据结构》 快速排序堆排序

    快速排序 快速排序是对冒泡排序进行改进的一种交换排序,可以大大加快排序的速度. 快速排序具体的算法思想是在待排序的序列中任选一个数作为枢轴值(pivotkey),用双指针一个指向表的第一个值(low= ...

最新文章

  1. Android移动端音视频的快速开发教程(十)
  2. Linux下查找文件方法
  3. java负数右移_Java中负数的右移
  4. centos yum安装python2.7及常见报错处理
  5. BDTC 2019 | 七个开发者能干多大的事?​
  6. 从定义到AST及其遍历方式,一文带你搞懂Antlr4
  7. power bi自定义地图_如何使用自定义形状图在Power BI中创建地理图
  8. 关于findViewById返回空指针的错误
  9. MySql 中文乱码问题
  10. xuperchain部署合约Select utxo error, details:NOT_ENOUGH_UTXO_ERR
  11. python ant_python3.7.1ant+TKinter在Tkin中显示来自ANT+设备的实时数据
  12. ZK(1)——分布式系统概念与ZK简介
  13. oracle数据库课后报告,ORACLE数据库课程设计报告
  14. phpstudy linux安装教程
  15. 微信提醒对方账号异常应该怎么办
  16. 前端纯CSS导入otf字体包
  17. java qo_Java中DAO/DTO/PO/VO/BO/QO/POJO
  18. 2018省赛第九届蓝桥杯真题C语言B第四题题解 测试次数
  19. shell中将字符串转换成数字
  20. NMOS管与PMOS管的区别与总结

热门文章

  1. java 监听事件和处理事件_Java基础教程之事件和监听器
  2. python简单体育竞技模拟_python初体验 —— 模拟体育竞技
  3. 【windows】windows允许 ICMP协议(允许ping)
  4. 都说它是年度Android机皇,都说它是年度Android机皇,Galaxy Note20 Ultra到底怎么样?...
  5. node.js打包环境部署CentOS7.4
  6. 公平锁非公平锁的实际使用_理解ReentrantLock的公平锁和非公平锁
  7. server2012 asp odb数据原_异地服务器文件及数据库定时备份
  8. inno setup打包的安装包如何在卸载完程序后可以继续安装_这两个方法就够了!快速制作Python程序Windows安装包...
  9. 在easyui中如何使用ajax请求数据,Ajax 中正常使用jquery-easyui (转)
  10. 洛谷P2351 [SDOi2012]吊灯 【数学】