C++:快速排序法的代码实现

2023-11-01

快速排序法

**快速排序法(quick sort)**的基本思想是:通过一趟排序将要排序的记录分割成独立的两部分,其中一部分的所有记录关键码比另外一部分的记录关键码都要小,然后再按此方法对这两部分数据分别进行递归快速排序,从而使序列成为有序序列。

设有A[1]一A[n]的n个数据,选取第一个数据作为关键数据,然后将所有比它小的数据都放到它前面,所有比它大的数据都放到它后面,称为一趟快速排序。其算法是:
①设置两个变量i、j,排序开始的时候i=左边界,j=右边界,令关键数据s=A[i]。
②从 i 开始向前搜索,直到找到小于s的数。
③从 j 开始向前搜索,直到找到小于s的数。
④如果i≤j,则交换A [ i ]和A [ j ]。
⑤重复第②~④步,直到i≥j;将关键数据与A[j]交换。
在这里插入图片描述

#include <iostream>
#include <stdlib.h>
#include<ctime>
using namespace std;
#define N 10


void Quicksort(int A[],int n,int left,int right){//快速排序,n为数组大小,left为左边界,right为右边界
	int i,j,t;
    if(left < right){   //一趟快速排序
    i = left;
    j = right+1;
    while(1){
        while(++i<n && A[++i]<A[left]);//i向后搜索<升序>降序
        while(j-1>-1 && A[--j]>A[left]);//J向前搜索,>升序,<降序
            if(i>=j)break;
            t=A[i],A[i]=A[j],A[j]=t;  //交换
    }
    t=A[left],A[left]=A[j],A[j]=t; //交换
    Quicksort(A,n,left,j-1);//左半部分递归
    Quicksort(A,n,j+1,right);//右半部份递归
	}
}

int main(){
	int A[N],i;
	srand((unsigned int )time(0));

	cout<<"随机生成的数组为:"<<endl;;
	for(i=0;i<N;i++){//随机生成一个10个的100以内的数字作为数组A
		A[i]=rand()% 100;
		cout<<A[i]<<" ";
	}
    cout<<endl;
    cout<<"快速排序结果为:"<<endl;
	Quicksort(A,N,0,N-1);//快速排序函数		
	for(i=0;i<N;i++)
    cout<<A[i]<<" ";	//输出
    return 0;
 }

结果如图:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++:快速排序法的代码实现 的相关文章

随机推荐

  • Spring Boot代码结构

    14 组织你的代码 Spring Boot不需要使用任何特殊的代码结构 然而 这里有一些有用的最佳实践 14 1 使用 default 包 当类没有包含package声明时 它被认为处于default package下 通常不推荐使用def
  • 解决 Android 开发过程中 出现 Duplicate class(包冲突)

    1 现在大部分的项目都是支持 Androidx 的 所以出现 Duplicate 的时候 先把 gradle properties 文件中添加参数 支持使用AndroidX android useAndroidX true android
  • 右移和与上&0xff作用

    tmp gt gt 8 0xff 以下是阅读他人文章后 个人对计算 tmp gt gt 8 0xff 的理解 将tmp转为二进制数 6322040 gt 11000000111011101111000 向右移16位 清掉该16位 且左边用0
  • zabbix安装报错:The frontend does not match Zabbix database.

    The frontend does not match Zabbix database 出现此错误为导入数据到数据库zabbix时 对应的mysql版本号与当前不相符 相关代码为 zcat usr share doc zabbix serv
  • 华为OD机试 - 括号匹配(Java)

    题目描述 给定一个字符串 里边可能包含 三种括号 请编写程序检查该字符串中的括号是否成对出现 且嵌套关系正确 若括号成对出现且嵌套关系正确 或该字符串中无括号字符 输出 true 若未正确使用括号字符 输出 false 实现时 无需考虑非法
  • php 7 node.js 并发,PHP7+Swoole、Node Express、Sails、Beego、ThinkPHP 并发性能测试

    最近由于产品业务出现请求瓶颈 需要更换产品框架 针对现在集中主流方案进行了逐一测试 服务器硬件配置 2 核 2G虚拟机 10000请求 500并发测试结果如下 性能测试结果 1 Nodejs Express测试结果如下 大约每秒处理2100
  • Z变换零极点与收敛域的关系

    原文地址 Z变换零极点与收敛域的关系 作者 沙拉酱 Z变换零极点与收敛域的关系 序列的ZT存在零点和极点 这是因为序列的ZT同信号的LT一样都是复变函数 区别只是自变量名称不同 因此其零点和极点的定义与LT的零点与极点的定义相同 在z平面上
  • 厦大纪荣嵘团队新作|OneTeacher: 解锁 YOLOv5 的正确打开方式

    Paper https arxiv org pdf 2302 11299 pdf Code https github com luogen1996 OneTeacher 导读 大家从中也可以看到一个趋势 便是现在监督学习领域已经是非常饱和了
  • UC缓存的php格式视频,UC缓存视频变成本地mp4_下载视频怎么转换mp4_我的下载站

    7条解答 1 uc缓存视频怎么转mp4 您好 很高兴为您服务 安卓版的UC浏览器 缓存的为vdat 保存在UCDownloads videodata这个文件夹里边 可以直接重命名让后将格式更改为mp4或者avi即可 如果仍有问题 请您继续向
  • 一文了解工业互联网标识解析二级节点

    我国工业互联网标识解析体系由国际根节点 国家顶级节点 二级节点 企业节点 公共递归解析节点等要素组成 其中 二级节点是指一个行业或者区域内部的标识解析公共服务节点 能够面向行业或区域提供标识编码注册和标识解析服务 以及完成相关的标识业务管理
  • 学习一门编程语言正确姿势-以python为例

    作为一个自学者 最重要的能力就是自学的学习能力 但不用过分担心浩瀚的计算机世界 因为计算机的底层知识变化是很慢的 比如我们用到的网络知识 几十年都没变化过 就算是最热门的人工智能 现在大家学习的大部分技术也都是十几年 甚至几十年前的技术 变
  • Cordova的配置文件Config.xml

    一 概述 在写这篇文章时 cordova的版本已是9 0 0 config xml 是Cordova项目的全局配置文件 这份配置文件的基础是W3C s Packaged Web Apps Widgets 规范 并进行了扩展 它份配置文件是用
  • 弯道超车!阿里甩出Spring Security宝典我粉了

    第一份笔记 案例介绍 初识权限管理 权限管理概念 完成权限管理需要三个对象 初识Spring Security Spring Security过滤器链 SpringSecurity使用自定义认证页面
  • Java 内存溢出(一)原因、复现、排查

    目录 一 内存溢出原因 二 内存溢出实例 1 堆溢出 2 虚拟机栈和本地方法栈溢出 3 方法区和运行时常量池溢出 4 本机直接内存溢出 三 内存溢出排查 内存溢出 是指应用系统中存在无法回收的内存或使用的内存过多 最终使得程序运行要用到的内
  • Windows控制台API官方文档

    2023年8月21日 周下午 中文文档 控制台函数 Windows Console Microsoft Learn 英文文档 Console Functions Windows Console Microsoft Learn
  • python生成Excel透视表

    假设你有如下数据 姓名 科目 成绩 小黑 语文 42 小娜 语文 23 小白 语文 98 小乐 语文 52 小黑 数学 30 小娜 数学 76 小白 数学 47 小乐 数学 73 小黑 英语 63 小娜 英语 83 小白 英语 4 小乐 英
  • 第3.1~3.3节《合成孔径雷达成像原理-皮亦鸣》

    目录 3 1 雷达成像特点 3 2 成像雷达的种类 3 3 合成孔径雷达简介 3 4 成像雷达距离向的高分辨率原理 3 5 成像雷达 3 6 合成孔径雷达的理论模型 3 7 图像质量评估指标 3 8 小结 3 1 雷达成像特点 雷达具有对运
  • YoloV7目标检测(Pytorch版)【详解】

    文章目录 一 网络结构 1 总体网络结构 2 主干网络介绍 backbone 2 1 多分支模块堆叠 2 2 下采样网络结构 2 3 整个backbone代码 3 FPN特征金字塔 二 预测结果的解码 1 获得预测框 置信度 种类的数值 2
  • 模糊搜索和精确搜索的区别_Elasticsearch系列---前缀搜索和模糊搜索

    概要 本篇我们介绍一下部分搜索的几种玩法 我们经常使用的浏览器搜索框 输入时会弹出下拉提示 也是基于局部搜索原理实现的 前缀搜索 我们在前面了解的搜索 词条是最小的匹配单位 也是倒排索引中存在的词 现在我们来聊聊部分匹配的话题 只匹配一个词
  • C++:快速排序法的代码实现

    快速排序法 快速排序法 quick sort 的基本思想是 通过一趟排序将要排序的记录分割成独立的两部分 其中一部分的所有记录关键码比另外一部分的记录关键码都要小 然后再按此方法对这两部分数据分别进行递归快速排序 从而使序列成为有序序列 设