引言

此文继上一次的c++快速排序之后,是时隔一年后的重新领悟。快速排序就是从一列序列中选择一个数作为基数,一般以左边第一个元素为基数,然后定义两个变量left与right,left指向左边第一个元素,与基数指向相同,right指向右边倒数第一个元素,从右侧开始移动right找到比基数小的元素,然后从左侧开始找到比基数大的元素,将右侧比基数小的元素与左侧比基数大的元素,即left与right指向的元素交换位置,再继续从右边开始移动right找出比基数小的元素,移动左边的left找到比基数大的元素,交换right与left指向的元素的位置,继续执行该操作,直到lfet指向的元素与right指向的元素是同一个元素,此时交换left指向的元素与基数的值,达到了左边的元素比基数小,右边的元素比基数大,再将基数左边所有的元素看成一个序列,基数右边所有的元素看成一个序列,两个序列按照之前的方式,选取左起第一个元素为基数,同时left指向左起第一个元素,right指向序列最后一个元素,继续之前的操作。基数选择左起第一个元素时,要先从右边开始移动下标查找,基数选择右边的元素,需要从左边开始移动查找。与按照从小到大的顺序排列和从大到小的顺序排列没有关系。

示例

下面是实现快速排序的代码,采用vs2010开发的控制台输出程序:

// quickSort.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <stdlib.h>
#include <iostream>using namespace std;/************************************************************************/
/* 功能:快速排序 (从小到大)3,5,2,7,9,1,6功能函数:void quickSort(int *parr,int left,int right)  快速排序void printArr(int *parr,int n)   输出数组元素*/
/************************************************************************/void quickSort(int *parr,int left,int right)
{int base,temp;int i = left;int j = right;base = parr[left];if(left >= right)//一个数或者不满足left<right则跳出循环{return;}while (i < j)//左边下表小于右边{while (parr[j] >= base && i < j)//右侧开始,寻找比基数小的元素,未找到下标减减{--j;}while(parr[i] <= base && i < j)//左侧开始找比计数大的元素,未找到下标加加{++i;}if (i < j)//坐标的下标小于右边的下标,且找到左边比基数大的元素,右边比基数小的元素,交换位置{temp = parr[j];parr[j] = parr[i];parr[i] = temp;}}parr[left] = parr[i];//左边的下标等于右边的下标,交换该元素,与基数的位置parr[i] = base;quickSort(parr,left,i-1);//左边序列排序quickSort(parr,i+1,right);//右边序列排序
}void printArr(int *parr,int n)
{for(int i = 0; i < n; ++i){cout<<parr[i]<<"\t";}
}int _tmain(int argc, _TCHAR* argv[])
{int arr[] = {3,5,2,7,9,1,6};printArr(arr,7);cout<<endl;quickSort(arr,0,6);printArr(arr,7);cout<<endl;system("pause");return 0;
}

项目的结构:

运行效果


重在理解,仅供参考。

C++快速排序(二)相关推荐

  1. [C/C++基础知识] 一篇就让你彻底搞懂qsort快速排序的文章

    最近在做LeetCode的题目.面试和笔试后发现经常考察快速排序的知识.通过这篇文章介绍,能让你彻底的了解和学习快排,主要从一下三个部分进行介绍:         一.C语言实现qsort快速排序   ...

  2. C语言版--单链表排序,冒泡排序,选择排序,插入排序,快速排序,应有尽有,保证看懂,没有bug!交换节点版本!

    一.废话不多说,直接上代码.如果想看双向循环链表的朋友,可以在我的博客里找. 你好 #include <stdio.h> #include <stdlib.h>typedef ...

  3. 《算法撕裂者》03 - 快速排序

    文章目录 零.前言 一.排序必学之快速排序 二.性能分析及算法改进 1.切换到插入排序 2.三数取中 3.三向切分 三.总结 零.前言 这篇快速排序的文章其实之前就写了,但是当时有个疑问就一直没发,今 ...

  4. 快速排序之JavaScript版

    基本思想 分治法 每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边. 在最坏的情况下,仍可能是相邻的两个数进行了交换.因此快速排序的最差 ...

  5. Algorithm:C++语言实现之内排序、外排序相关算法(插入排序 、锦标赛排序、归并排序)

    Algorithm:C++语言实现之内排序.外排序相关算法(插入排序 .锦标赛排序.归并排序) 目录 一.内排序 1.插入排序 2.锦标赛排序 3.归并排序 二.外排序 1.过程 一.内排序 1.插入 ...

  6. 速来围观!leetcode java实现汇总

    文章目录 前言 一.排序 1.1 选择排序 1.2 冒泡排序 1.3 插入排序 1.4 归并排序 1.5 快速排序 二.查找 2.1 二分查找(有序数组找某个数是否存在) 三.寻找最大数字 四.两数之 ...

  7. 常用七大经典排序算法总结(C语言描述)

    目录 一.交换排序 1.冒泡排序 2.快速排序 二.插入排序 1.直接插入排序 2.希尔(shell)排序 三.选择排序 1.直接选择排序 2.堆(Heap)排序 四.归并排序 正文 简介 其中排序算 ...

  8. 一文了解分而治之和动态规则算法在前端中的应用

    一文了解分而治之和动态规则算法 一.分而治之 1.分而治之是什么? 2.应用场景 3.场景剖析:归并排序和快速排序 二.动态规则 1.动态规则是什么? 2.应用场景 3.场景剖析:斐波那契数列 4.动 ...

  9. java 实现内存数据表_数据结构 Java中的内存

    根据线性表的实际存储方式,分为两种实现模型: 顺序表 ,将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示. 链表 ,将元素存放在通过链接构造起来的一系列存储块中. 一.顺 ...

  10. 【游戏后端】游戏服务器端开发的一些建议(转载)

    摘要: 本文作为游戏服务器端开发的基本大纲,是游戏实践开发中的总结.第一部分专业基础,用于指导招聘和实习考核, 第二部分游戏入门,讲述游戏服务器端开发的基本要点,第三部分服务端架构,介绍架构设计中的一 ...

最新文章

  1. Stream Processing: S4系统模型分析和关键源码读解
  2. 屏蔽storm ui的kill功能
  3. Java实现文件上传-按钮弹出上传页面
  4. oracle protocol=beq 不可用,学习笔记:Oracle数据库坏块 深入研究obj$坏块导致exp/expdp不能执行原因...
  5. 使用sitemesh建立复合视图 - 1.hello
  6. RKNN Toolkit使用教程
  7. php strtoupper 和 array_change_key_case 字符串转大写,小写
  8. 前端学习(1031):jquery多库共存
  9. 怎么利用GitHub
  10. c# wpf 面试_【远程面试】九强通信 | 九洲电器集团全资子公司
  11. 计算机网络之数据链路层:19、总结
  12. python语言中有3种表示字符串的方式、单引号和_Python中三种类型的引号(单引号、双引号、三引号)...
  13. 《Linux指令从入门到精通》——4.4 Linux下的文本编辑指令
  14. 移动端手机抓包工具小助手
  15. Android 抓包工具
  16. 3分钟下载好网易云付费音乐
  17. canvas 踩坑 * 小球弹性碰撞逻辑解析
  18. 中标麒麟matlab,中标麒麟(龙芯CPU)--忘记root密码怎么修改?
  19. linux动画制作软件,你也可以成为设计师!宫崎骏御用2D动画制作软件
  20. 【完全背包或哈希映射】HDU-1248 寒冰王座

热门文章

  1. 最IN的云原生架构,阿里云 Serverless 事件总线 EventBridge 重磅发布
  2. 莉莉丝《剑与远征》:基于阿里云全站加速提升用户体验
  3. 【人工智能】AI如何把招人效率提高四成
  4. 前端内存优化的探索与实践
  5. OpenKruise - 云原生应用自动化引擎正式开源
  6. 从遇见到信任 | Apache Dubbo 的毕业之旅
  7. 云原生/低代码/数据科学/计算等方向内容整理志愿者招募了!
  8. “毕业1年,做Python挣了50W!”网友:吹得太少..
  9. 电脑桌面归纳小窗口_电脑一分钟小技巧:如何将电脑设置为定时关机?
  10. python封装c接口_用C为python3.1封装mysql接口(一)