C++快速排序(二)

引言

此文继上一次的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;
}

项目的结构:
在这里插入图片描述

运行效果

在这里插入图片描述
重在理解,仅供参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何看待“英特尔是一家软件公司”?

戳蓝字“CSDN云计算”关注我们哦&#xff01;1968年7月&#xff0c;传奇半导体公司仙童的两位共同创办人罗伯特诺伊斯、高登摩尔从仙童请辞&#xff0c;共同创办了以“INTegrated ELectronics&#xff08;集成电子&#xff09;”前缀为名的一家电子公司&#xff0c;这家公司就是…

C++插入排序

引言 插入排序就是将一个序列中第一个元素&#xff0c;认为是有序数组&#xff0c;该数组含一个元素&#xff0c;剩下的元素构成一个无序数组&#xff0c;将无序数组中元素逐一与有序数组中最后一个元素开始向前比较&#xff0c;根据具体的从大到小的顺序或者从小到大的顺序&a…

日常软件安装

软件安装专栏总览 文章目录一、JDK安装1.1下载、安装一路next1.2 配置环境变量1.2.1. 新建系统变量JAVA_HOME1.2.2. 创建CLASSPATH环境变量1.2.3. 编辑Path环境变量1.2.4. 验证1.2.5. 验证javac一、JDK安装 1.1下载、安装一路next 1.2 配置环境变量 1.2.1. 新建系统变量JAVA…

Java 动态加载类

Class.forName(“类的全称”); 不仅表示类的类类型&#xff0c;还代表了动态加载类 请大家区分编译、运行 编译时刻加载类时静态加载类、运行时刻加载类时动态加载类 编写一个Office.java文件&#xff0c;在类中创建2个不存在的对象Word和Excel&#xff0c; public class Off…

升级为私有全栈云的腾讯云TStack究竟强在了哪儿?

戳蓝字“CSDN云计算”关注我们哦&#xff01;在刚刚结束的美国丹佛Open Infrastructure峰会上&#xff0c;腾讯云对全新升级为私有全栈云的TStack进行了详细的介绍&#xff0c;引起峰会现场众多OpenStack专业人士侧目。那么&#xff0c;这款腾讯基于OpenStack倾力打造的私有云解…

C++中继承与虚函数示例

引言 此文记录以下虚函数和继承的一个示例。 示例 class Base {virtual void method(){std::cout<<"from base"<<std::endl;} public:virtual ~Base(){method();}void baseMethod(){method();} };class A:public Base {void method(){std::cout<&l…

漫画:图的 “多源” 最短路径

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;————— 第二天 —————小灰的思路如下&#xff1a;第一步&#xff0c;利用迪…

C++实现单链表的反序

引言 将一个没有空结点作为头的单链表实现反转。其实质就是将结点的指针域指向反转。定义指向当前结点的指针&#xff0c;指向前一个结点的指针&#xff0c;指向当前结点的后一个结点的指针&#xff0c;这个过程中包含只有一个结点的单链表&#xff0c;那么反转之后还是它本身…

vs2010中引入boost库

引言 在vs2010中无法使用C11中的大多数特性&#xff0c;像mutex互斥锁&#xff0c;要想使用需要引入boost库。下面记录一下boost库引入到vs2010中。 实现 分为以下几步&#xff1a; 下载boost压缩包 可以采用下面的地址下载适合自己的版本。下载地址&#xff1a; https://…

立足国产自主可控技术 达梦DM8数据库新品化繁为简

戳蓝字“CSDN云计算”关注我们哦&#xff01;面对技术日新月异的发展&#xff0c;如今俨然已经演变成为数据发展引来的潮流&#xff0c;而数据库的建立对企业的发展有着举足轻重的作用&#xff0c;对数据库的有效开发和管理是企业正常运行的保障&#xff0c;作为现代化经济发展…

C++中关于隐藏的理解

引言 在使用中弄清楚隐藏的区别之后&#xff0c;还需要明白怎么使用。下面说以下隐藏&#xff0c;重写&#xff0c;重载的区别&#xff1a; 与重载的区别&#xff1a; 在父类与子类中&#xff0c;函数名相同&#xff0c;参数不同&#xff0c;无论父类中的同名函数是否含有virt…

183条地铁线路,3034个地铁站,发现中国地铁名字的秘密。

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;小F转载&#xff1a;法纳斯特最近看了新周刊的一篇推送&#xff0c;有…

创建Git仓库的三种形式

创建Git仓库的三种形式&#xff1a; 2种本地创建和远程拉取 文章目录1. 在idea中初始化仓库1.1. 进入目录&#xff0c;初始化仓库1.2. git init 目录名1.3.1 远程拉取1. 在idea中初始化仓库 1.1. 进入目录&#xff0c;初始化仓库 进入目录git init 创建test1目录&#xff0c;…

C++中常用字符串相关的编程题

索引 找出字符串中的数字&#xff0c;字母和符号&#xff0c;并分别存储 找出字符串中所有不重复的字符&#xff0c;并输出 统计字符串中每个字符的个数&#xff0c;并输出 编译环境 以下所用的开发环境是vs2010,创建的都为控制台输出程序。下面只贴出创建项目后修改了的c…

刷了一个半月算法题,我薪资终于Double了

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;前言很多人感觉大公司都是要手写算法&#xff0c;那刷题是必不可少了&#xff0c;你技…

创建版本库

什么是版本库呢&#xff1f;版本库又名仓库&#xff0c;英文名repository&#xff0c;你可以简单理解成一个目录&#xff0c;这个目录里面的所有文件都可以被Git管理起来&#xff0c;每个文件的修改、删除&#xff0c;Git都能跟踪&#xff0c;以便任何时刻都可以追踪历史&#…

mac上用qt调用自己生成的qt动态库,该动态库又依赖第三方库

qt下依赖于第三方库生成的动态库的调用概述基于声网的sdk如何在自己的动态库中使用使用基于第三方库的动态库下面看pro文件中的设置概述 初次使用mac上的qtCreator生成动态库&#xff0c;该动态库编写时调用了第三方库&#xff0c;基于生成的该动态库&#xff0c;编写测试程序…

版本回退

现在&#xff0c;你已经学会了修改文件&#xff0c;然后把修改提交到Git版本库&#xff0c;现在&#xff0c;再练习一次&#xff0c;修改readme.txt文件如下&#xff1a; i am gblfy i am yuxin然后&#xff0c;【工作区】-【暂存区】-【本地仓库】尝试提交&#xff1a; 修改…

Docker精华问答 | 数据库为什么不适合放在 Docker 中运行?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux或Windows 机器上&#xff0c;也可以实现虚拟化。今天就让我们一起看看关于Docker …

Mac下使用macdeployqt打包qt程序:

概述 初次在Mac上使用qt的macdeployqt来打包生成的可执行程序&#xff0c;这里记录下。由于我的程序是调用之前生成的qt动态库&#xff0c;而动态库又依赖于第三方库&#xff0c;相对于没有库文件依赖的程序&#xff0c;这里有一些需要注意的点&#xff0c;下面是打包的步骤。…