C++实现快速排序

c++十大排序——快速排序 算法基本知识铺垫 有些人可能不知道什么是稳定排序、原地排序、时间复杂度、空间复杂度,我这里先简单解释一下: 1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序 2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。 3、原地排序:原地排序就是指在排序过程中不申请多余的存储空间,只利用原来存储待排数据的存储 空间进行比较和交换的数据排序。 4、非原地排序:需要利用额外的数组来辅助排 阅读详情

C++快速排序

这里对数组{2,4,6,8,10,1,7,44,5,9,3,0};进行排序。
先利用fous来存数组第一个元素或者最后一个元素当做即将成为的"中间"元素。
利用i来找从左边到右边一个比fous大的元素。
利用j来找从右边到左边一个比fous小的元素。

比如第一趟:
fous=2,此时先找j的元素,j一开始记录数组最后一个元素也就是0。
0小于2,所以a[11]的值赋予a[0]。(此时i=0,j=11)
此时数组为{0,4,6,8,10,1,7,44,5,9,3,0}。
在找i从左往右的一个比fous大的元素,此时找到了4,将 a[1]的值赋予a[11]。(此时i=1,j=11)
此时数组为{0,4,6,8,10,1,7,44,5,9,3,4}。

在如第二趟:
fous=2,此时j记录的是11,j向前找,找到了1,对应的j的记录为5。
将j记录的值赋予与此时i记录的值a[1]。
得到{0,1,6,8,10,1,7,44,5,9,3,4}。
在次将i向后移。找到了6(比fous=2大),将6赋予此时j记录的下标的值。
得到{0,1,6,8,10,6,7,44,5,9,3,4}。

以此类推知道i==j时
将fous的值放入
得到{0,1,2,8,10,6,7,44,5,9,3,4}。

则可以理解为,先从右到左找到一个比fous小的元素记录下来,
在从左往右找到一个比fous大的元素记录下来。
在交换这两个值。

————————————————————————————
另外一种思想,即每次都把小的换到fous的前面。
把大的换到fous的后面。
即i,j,fous与前面记录的变量类似;
每次从右往左找到一个比fous小或等于的数;
每次从左向右找到一个比fous大或等于的数;
交换a[i],a[j]。当i==j时停止。
其过程如下:
1:{0,4,6,8,10,1,7,44,5,9,3,2}
2:{0,2,6,8,10,1,7,44,5,9,3,4}
3:{0,1,6,8,10,2,7,44,5,9,3,4}
4:{0,1,2,8,10,6,7,44,5,9,3,4}

其代码如下:

#include<iostream> 
using namespace std;
//快速排序 
void QuickSort(int *a,int left,int right)
{	
	if(left<right)
	{
		int i=left;
		int j=right;
		int fous=a[left];
		while(i<j)
		{	//每次从数组前面i开始找到一个比fous大或等于的,从数组后面j开始往前找到一个比fous小或等于的 ,交换他们 
			while(a[j]>fous){ j--; }		
			while(a[i]<fous){ i++; }
			swap(a[i],a[j]);
		}
		a[j]=fous;				//当i==j后  ,把fous的值赋予a[i]或a[j],此时fous处于“中间”位置。 
		QuickSort(a,left,j-1);	// 将数组前面部分继续递归 
		QuickSort(a,j+1,right);	// 将数组后半段继续递归 
	}
}

int main()
{
	int a[]={2,4,6,8,10,1,7,44,5,9,3,0};
	QuickSort(a,0,11);
	for(int i=0;i<12;i++)
	{
		cout<<a[i]<<" ";
	}
	cout<<endl;
	
	return 0;
}
c++模板实现快速排序 c++模板实现快速排序 1.什么是快速排序 快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 2快速排序实现过程 快速排序算法通过多次比较和交换来实现排序,其排序流程如下: (1)首先设定一个分界值,通过该分界值将数组分成左右两部分 阅读详情

相关推荐

快速排序算法C++实现

1、快速排序的原理是:找到一个主元,将无序的数组分为两部分,比主元大的和比主元小的,以升序为例,将比主元小的依次放在主元的左边,比主元大的一次放在主元右边。对主元左边的再使用快速排序,一直到数组只有两个元素,则将会生成有序的数组,依次对主元右边的进行上述操作即可获得有序数组。 2、伪代码 PARTITION(Arr , left , right){ //选择主元 pca = ...

weixin_42503261的博客 1052

任意四点按顺时针排列

任意四点按起始点从左上角开始,顺时针输出,代码如下: #coding:utf-8 import cv2 import numpy as np if __name__=='__main__': img = np.zeros((1000, 1000, 3), np.uint8) # cnt=np.array([[474,143],[448,135],[369,359],[343,350]]) #倾斜的矩形 # cnt=np.array([[500,300],[100,100],

ANDY 3459

新手必看:SMIC 0.18um PDK安装保姆级教程(附Cadence IC617环境配置)

本文提供SMIC 0.18um PDK在Cadence IC617环境下的详细安装教程,涵盖环境准备、文件解压、安装脚本运行、环境变量配置及Cadence集成验证等关键步骤,特别针对初学者常见问题提供解决方案,助力快速掌握芯片设计工具配置。

weixin_30522183的博客 491

c++数组排序的五种方法

c++数组排序的五种方法 方法一:冒泡排序 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 方法二:sort函数排序 示例:对数组2,4,5,3,1进行排序 对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。 重复以上的步骤,每次比较次数-1,直到不需要比较 示例:对数组4,2,8,0,5,7,1,3,9 进行排序 sort函数的算法效率相当于快排。 sort 函数默认的是进行升序排序 有两种方法可以进行降序,可自由选择 1. 使用greater() 如果排序其他

weixin_64565233的博客 4万+

详细介绍:国产操作系统银行麒麟V10的下载和安装

银河麒麟是由。银河麒麟已经发展为银河麒麟服务器操作系统、桌面操作系统、嵌入式操作系统、麒麟云、操作系统增值产品为代表的产品线。为攻克中国软件核心技术“卡脖子”的短板,银河麒麟建设自主的开源供应链,发起中国首个开源桌面操作系统根社区openKylin,银河麒麟操作系统以openKylin等自主根社区为依托,发布最新版本。

lz17267861157的博客 1万+

Altium Designer 16安装教程(Windows11、小白教程)

Altium Designer 16在Windows11中的超详细安装教程

qq_47003770的博客 1万+

C++算法之快速排序

C++算法之快速排序 文章目录C++算法之快速排序一、快速排序引出二、代码实现三、复杂度分析 一、快速排序引出 我们知道,给一个长度为n的序列排序,有三种很简单的算法:选择排序、冒泡排序、插入排序。这三种算法的复杂度均为O(n^2)。 如果按照计算机1秒钟可以进行10^8次计算作为参照,那么它1秒之内可以排序的序列长度大概为10^4这个数量级。 然而,在实际生活中,10^4级别并不是一个很大的数字,比如说山东每年会有超过50万人参加高考。如果我们想将山东省内所有学生按照高考成绩排序的话,使用O(n^2)

R_mine的博客 2万+

2023-12-26~2025-07-04备份

一、海康视觉与汇川机器人 服务器-客户端通信设置IP在同一网段名称IP端口类型海康相机工控机7930服务器机器人3000客户端海康VM服务器设置1通信管理 增添TCP服务端,设置本机IP:192.168.0.20,端口号79302 协议解析 通信双方约定通信格式(设置收发数据格式,分隔符)机器人客户端设置(不同类型机器人设置有差别)1 通讯服务设置 设置连接服务器IP、服务端端口号、机器人端口号,确保连接正常2 协议解析 使用指令代码构建通讯解析。

青铜小码农 3126

快速排序算法C++实现(超详细解析!!!!)

快速排序,其实是一种分治算法,那么在了解快速排序之前,我们先来看看什么是分治算法。在算法设计中,我们引入分而治之的策略,称为分治算法,其本质就是将一个大规模的问题分解为若干个规模较小的相同子问题,分而治之。

weixin_45031801的博客 11万+

Android 13.0 SystemUI下拉状态栏背景增加高斯模糊背景

在13.0的产品开发中,发现现在很多产品都是高斯模糊背景的,这种高斯模糊背景看起来效果很不错,产品开发需要SystemUI下拉状态栏背景也是高斯模糊背景,所以就要来实现下拉状态栏高斯模糊背景

安卓兼职framework和app工程师的博客 2670

「UG/NX」Block UI 曲线收集器CurveCollector

曲线收集器块用于选择一条或多条曲线,包括通过选择意图连接的末端曲线链。曲线选择意图用于此块,但它不支持“交点处停止”、“跟随圆角”、“中间链”和“特征内链”等规则选项。

何曾参静谧的博客 1090

图解快速排序(C++实现)

参考大话数据结构这本书对快速排序的讲解,本文作一个梳理,并在最后给出快排的C++实现代码。 假设我们现在对“612 79345 108”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基...

Magnum的博客 17万+

Quartus II编译时出现Error (119013): Current license file does not support the EP4CE6E22C6 device

Quartus II编译时出现Error (119013): Current license file does not support the EP4CE6E22C6 device, Quartus的安装过程不同于ISE/vivado的安装。“Current license file does not support”这种情况多出现在高版本的quartus中综合很久以前的代码,使用很早型号的FPGA或是CPLD。对于这种情况,就得在官网或是其他网站上下载包含所需Device的库文件。

夜半少年的博客 1万+

c++实现快速排序

快速排序是对冒泡排序的一种改进,由 C.A.R.Hoare(Charles Antony Richard Hoare,东尼·霍尔)在 1962 年提出。 快速排序的核心思维 每次都取数组的第一个元素作为基准元素,凡是大于这个基准元素的都放在他的右边,凡是小于这个基准元素的都放在它的左边,具体步骤如下: 设置两个变量i和j(也称为哨兵),令序列第一个元素作为基准元素 i指向序列的最左边,j指向序列的最右边,j从右往左试探,i从左往右试探,直到j找到小于基准的数就停止,i找到大于基准的数就 ...

weixin_41009689的博客 3786

告别标注地狱!YOLO+CLIP多模态零样本检测全实战:图文联合推理,想检测什么直接输文字,不用训模型

这套方案我给朋友的超市用了快3个月,运行极其稳定,临期商品的检测准确率能到96%,后续加了“货架空货检测”“通道杂物堆积检测”,都是改一行文本就搞定,完全不用重新开发,朋友说省了十几万的定制开发费用。很多做计算机视觉的朋友,总觉得目标检测必须标数据、训模型,其实不是的。现在多模态大模型的能力已经足够强,把YOLO的定位能力和CLIP的图文泛化能力结合起来,就能用极低的成本,搞定绝大多数定制化检测需求。对于我们开发者来说,技术的价值从来不是炫技,而是用最简单的方案,解决最实际的问题。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 516

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

快速排序c++实现 快排C++代码实现

快速排序c++实现 快排C++ 第一、算法描述 快速排序由C. A. R. Hoare在1962年提出,该算法是目前实践中使用最频繁,实用高效的最好排序算法, 快速排序算法是采用分治思想的算法,算法分三个步骤 1.从数组中抽出一个元素作为基数v(我们称之为划界元素),一般是取第一个、最后一个元素或中间的元素 2.将剩余的元素中小于v的移动到v的左边,将大于v元素移动到v的右边 3.对左...

weixin_30758821的博客 577

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++  实现的快速排序算法

快速排序算法思想的资料很多,这边只展示用C++ 实现的快速排序算法: ​ ​ #include <stdio.h> #include <stdlib.h> void quickSort(int arr[], int nLen) { if (nLen <= 1) { return; } int n = arr[0]; ...

donglinshengan的专栏 403

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

快速排序之C++实现

快速排序之C++实现1.快速排序之C++实现1.1 split划分1.2 partition划分2.具体代码 1.快速排序之C++实现 快速排序本质上是一个分治算法,其重点在于数组的拆分。当我们定义一个比较基准元素后,将数组中小于该基准元素的数放到其左边,将大于基准元素的放到其右边。这样我们就将数组拆分成了左右两部分:小于比较元素的数组;大于比较元素的数组。我们再对这两个数组进行同样的拆分,直到拆分到不能再拆分,数组就自然而然地以升序排列了。 #mermaid-svg-a0BPjHIkxneJrz5l {f

ITSOK_123的博客 4098

快速排序C++实现

左右指针法实现快排,快排核心问题和极端案例分析

qq_48346887的博客 1568

快速排序c++实现

快速排序c++实现 #include <iostream> #include <ctime> #include <vector> using std::vector; void quicksort(vector<int>& vec,int low,int high) { if(low >= high) return; int...

weixin_44048823的博客 237

快速排序—C++实现

三大排序相信大家都很熟悉吧。 所谓三大排序,就是所谓的冒泡排序,选择排序,插入排序。 但是这三种排序虽然很经典,但是我们却很少用到,归其原因,是因为效率太低了,三大排序的平均时间复杂度为O(n^2)。 而今天给大家介绍的快速排序有着O(nlogn)的时间复杂度。 在排序中,快速排序的效果通常较好,但是它的效率并不稳定,在最坏的情况下会退化成O(n^2)的时间复杂度。 快速排序的实现思路 快速排序的思想是递归,这里以升序排列为例,每一次排序都有一个基准值,在这个数左边的都比它小,在右边的都比它大。然后对其左边

weixin_42494845的博客 3353
上一篇: C++实现插入排序全过程
下一篇: 算法设计--JAVA实现稀疏矩阵
AlonScholar
博客等级 码龄7年 25粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值