c++实现快速排序算法(递归)

C++实现快速排序算法(递归法) 快速排序是对冒泡排序的一种改进,又称为分区交换排序,它是由托尼·霍尔(C.A.Hoare)提出并发展而来的。快速排序采用的是分治策略,它是目前已知的排序速度最快的一种排序方法。 由于在冒泡排序中记录的比较和交换总是在相邻的单元间进行的,记录每次交换只能向前或向后移动一个位置,故而比较和移动的总次数较多。而在快速排序中,记录的比较和交换是从两端向中间进行的,关键字较小的记录可能会一次从后面单元交换到前面去,与之类似,关键字较大的记录一次就能从前面单元交换到后面去,记录移动的距离较远,因而减小了总的比较次数和移 阅读详情

快速排序是对冒泡排序的改进,是一种不稳定的排序算法,其时间复杂度是O(n),被认为是目前最好的一种内部排序方法。

它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。——此处摘自百度百科。

Talk is cheap. Show me the code。关键是用一个基准值作为比较对象。

void quickSort(int a[], int low, int high)
{
	if (high < low)return;

	int i = low;
	int j = high;
	int key = a[low];

	while (i < j)
	{
		//从右向左找比基准key小的值
		while (a[j] >= key && i < j)
		{
			j--;
		}
		//从左到右找比基准key大的值
		while (a[i] <= key && i<j)
		{
			i++;
		}
		if (i < j)
		{
			int tmp = a[i];
			a[i] = a[j];
			a[j] = tmp;
		}
	}
	//基准值归位
	a[low] = a[j];
	a[j] = key;

	//递归
	quickSort(a, low, j - 1);
	quickSort(a, j + 1, high);
}

//主函数
int main()
{
	int array[10] = { 10, 8, 6, 19, 3, 41, 4, 7, 98, 1 };
	cout << "排序前:";
	int len = sizeof(array) / sizeof(array[0]);
	cout << "len=" << len << endl;
	for (int i = 0; i < len; i++)
	{
		cout << array[i] << " ";
	}

	quickSort(array,0,len-1);

	cout << "排序后:";
	for (int i = 0; i < len; i++)
	{
		cout << array[i] << " ";
	}


	return 0;
}

 

保姆级教程:在RK3568开发板上手把手配置RMII百兆以太网DTS节点 本文提供了一份详细的RK3568开发板RMII百兆以太网DTS节点配置教程,涵盖基础概念解析、关键参数设置、实际操作步骤及常见问题排查。通过手把手指导,帮助开发者快速完成RK3568开发板的以太网配置,特别适合嵌入式系统开发者参考。 阅读详情

相关推荐

grafana使用方法

1、点击仪表盘2、新建仪表盘3、选择数据源4、选择查询的条件5、美化。

2403_87359664的博客 323

[C++] 快速排序 (递归)

C++ 实现快速排序算法

知秋的博客 529

半监督的医学分割数据集(LA, Pancreas, ACDC和PROMISE12)分享

这篇文章提供了四个常用的半监督医学分割数据集,所有数据集都已经被处理成了.h5文件。下载之后就可以直接使用

qq_45691955的博客 4174

C++递归实现快速排序

快速排序的递归调用,牵扯到了递归和回溯。需要读者自己了解栈帧的开辟与回收.

m0_56350559的博客 241

距离多普勒谱(RD谱)绘制方法及理解

RD谱是信号处理领域常用的图形。原始信号往往是一维时域序列,如何将其二维化,并进行变换生成RD谱呢?由于刚刚接触,查阅了网络上、老师手里的资料,发现RD谱的绘制方法并不统一,有些存在一定问题。在此,将心得体会记录下来。

mddh_123的博客 3万+

MacBook 本地化部署 Dify 指南

dify 怎么安装部署 有哪些坑 !

weixin_44542598的博客 1521

快速排序的递归解法(C++实现)

快速的排序在这里讨论两种常规解法和一种考虑数组中有相同值情况时的简便解法。 首先来看常规解法一: 参考快速排序—(面试碰到过好几次)。 如下图所示,假设要给由4个元素7,13,5,9组成的数组进行排序。最开始的基准数据为数组第一个元素7。首先用一个临时变量tmp来存储基准数据,然后分别从数组的两端扫描整个数组,设两个指示标志:L指向左边的起始位置,R指向右边的末尾位置。 首先,从末尾位置开始,如...

qq_40788950的博客 1612

MATLAB仿真实战:双有源桥(DAB)变换器的扩展移相调制(EPS)全流程解析

本文提供了一份详细的MATLAB/Simulink仿真实战指南,手把手解析双有源桥(DAB)变换器在扩展移相调制(EPS)下的全流程建模。内容涵盖从核心原理、主功率电路搭建、EPS驱动信号生成,到仿真运行、波形分析及模型优化的完整步骤,旨在帮助工程师和研究者快速掌握DAB变换器的仿真与性能验证方法。

o4p5q6r7s的博客 503

C++实现快速排序(递归版)

#include <iostream> #include<time.h> #include<stdio.h> #include<stdlib.h> #define LEN 10000000 int arr[LEN]; using namespace std; int partion(int a[],int p,int r){ //rand s...

Jayler_May的博客 1427

PMSM单电阻采样避坑指南:如何解决非观测区电流重构难题(附ST专利分析)

本文深入解析了PMSM单电阻采样技术中的非观测区电流重构难题,并详细介绍了ST专利方案及移相法的工程实践。通过优化PWM调制策略和系统级调试方法,有效解决了相电流检测精度问题,为电机控制领域的工程师提供了实用的技术指南。

weixin_33737774的博客 631

AI图像识别在临电配电箱安全检测中的应用与实践

计算机视觉与AI图像识别技术正逐步改变传统工业检测方式。通过深度学习模型如YOLOv5和ResNet,系统能自动识别设备元件并分析其状态,大幅提升检测效率和准确性。这种技术特别适用于需要严格遵循行业标准的场景,如临电配电箱的安全检测。将《施工现场临时用电安全技术规范》等条文转化为可量化的算法,AI系统能自动检查PE线连接、漏保功能等关键项目。实际应用表明,此类解决方案可使电气事故率下降90%以上,同时检测耗时缩短80%,为工地安全提供了智能化保障。

weixin_29042035的博客 328

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

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

weixin_45031801的博客 11万+

YOLOv9 损失函数解析

YOLOv9作为YOLO系列的最新成员,在损失函数设计上进行了多项创新,重点优化了动态任务对齐机制、多模态定位损失融合以及跨层级梯度协同,进一步提升了检测精度与训练效率。

浩瀚之水的专栏 1293

如何用C++实现递归的快速排序算法

快速排序是一种高效的排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。快速排序算法的核心是分治策略和递归操作。在实现过程中,通过选择一个基准元素,将数组分为两个子数组,一个包含比基准元素小的元素,另一个包含比基准元素大的元素。然后递归地对这两个子数组进行快速排序。

void9main的博客 226

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C++非递归实现快速排序算法

文章目录使用非递归原因实现方法代码实现 使用非递归原因 因为当数据量非常大的时候,使用递归就会产生巨大的栈帧,就会造成栈溢出,所以我们来学习一下非递归是如何实现快排算法 实现方法 递归的算法主要是在划分子区间,如果要非递归实现快排,只要使用一个栈来保存区间就可以了。一般将递归程序改成非递归首先想到的就是使用栈,因为递归本身就是一个压栈的过程。 代码实现 int PartSort3(vector<int>& a,int begin,int end) { int cur=begin

Hedenghui777的博客 1521

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

快速排序的递归和非递归实现

快速排序的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,已达到整个  序列有序.   快速排序是一种不稳定的排序方法,其平均时间复杂度为:O(NlogN).   特别注意:快速排序中用到的Partition函数,它的作用是进行一趟快速排序,返回"曲轴“记录所在的位置p."曲轴“记录就是一个参考记录,经

云中孤鹜专栏 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

算法C++ 快速排序递归代码实现(第二章)

文章目录造轮子博客链接我对快速排序的理解代码实现测试数据1实现效果1测试数据2实现效果2 造轮子博客链接 算法第四版C++算法实现全集 我对快速排序的理解 我认为快速排序 真的是必须必须必须要能够在15分钟之内手撕出来的 算法 重要性不言而喻 无论是面试还是考试其他的地方而言 除了对于面试这些其他之外 确实可能是最实用也是目前最快的排序算法了 就像C++的sort还是 用的也是快排 但是确实 我认为快排需要注意的地方太多了 我今天下午的英语课一点东西没听 就在研究看书 看快排 今天晚上在图书馆里面 把书

Love 6's Private Blog 542

C++递归快速排序算法

这篇博客将介绍C++实现的递归快速排序算法。 如图所示,递归快排的思想是如下。从待排序数列中,选取一个值,作为进一步排序的中间点。这个值是序列中的任意一个元素。 接下来,看中间点左边的所有数,是否都是小于这个中间点元素的,如果是就跳过,如果不是就挪到中间点右边去。 然后看中间点右边所有数,是否都是大于这个中间点元素的,如果是就跳过,如果不是就挪到中间点左边去。 此时本次递归任务完成。 ...

test test day day up 666

C++之快速排序的递归与非递归调用

912. 排序数组 给你一个整数数组 nums,请你将该数组升序排列。 示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:nums = [5,1,1,2,0,0] 输出:[0,0,1,1,2,5] 递归方法 相信递归方法大家闭着眼也能写出来,毕竟这是各大互联网公司面试必手撕的代码 #include<iostream> #include<map> #include<string> #include<vector>

weixin_42579072的博客 528

递归与分治法实现快速排序算法

递归与分治法实现快速排序算法,输入一串以英文字符逗号隔开的数字,按升序排列法实现快速排序算法。主要是要了解明白递归快速排序,然后进行代码的缝合编写。请耐心!!!

qq_62512411的博客 1637

快速排序算法递归与非递归实现

快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归或者非递归进行,以此达到整个数据变成有序序列。快速排序的递归算法:   void qsort(int a[],int left,int right)  {       i

Kylin Zhang的专栏 8282

快速排序递归与非递归算法

快速排序是不稳定的,是对冒泡排序的改进。它的改进之处在于每轮会使一个基数归位,同时可以使基数两边的两组数基本有序(基数左边的数都小于基数,基数右边的数都大于基数)它的平均时间复杂度O(nlogn),最坏时间复杂度就是退化成冒泡排序O(n^2)思路无论是递归还是非递归,都需要给基数归位,那么基数怎样归位呢?首先是选取基数(一般选取数组第一个或者是最后一个,这样方便计算)。然后从数组最右端依次向左端搜...

Kwong 1010

[腾讯面试]快速排序算法

一、快速排序-递归算法 C++版: #include #include using namespace std; int partition2(int a[], int l, int h) { int i = l; int j = h; int key = a[l]; while(i<j) { while(key<=a[j] && (i<j)) j--; a[i]

Mission Impossible 1465

非递归快速排序算法

昨天做人人网笔试题,其中一个就是快排非递归算法,当时考虑的不全面,下面发下正确答案。 先说递归算法 #include #include using namespace std; int partion(int*arr,int p,int r) { int key=arr[p];int i=p; for(int j=p+1;j { if(arr[j] { i++; int

hanzy0823的专栏 948

算法:快速排序

引用百度百科的快排原理 原理 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选 快排图 快排图 用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。 [1] 一趟快速排序的算法是: [1] 1)设置两...

顾道长生的科研笔记 768

蓝桥杯排序【排序】——快速排序

题目描述: 用递归来实现快速排序(quick sort)算法。快速排序算法的基本思路是:假设要对一个数组a进行排序,且a[0] = x。首先对数组中的元素进行调整,使x放在正确的位置上。同时,所有比x小的数都位于它的左边,所有比x大的数都位于它的右边。然后对于左、右两段区域,递归地调用快速排序算法来进行排序。 输入: 输入只有一行,包括若干个整数(不超过10个),以0结尾。 输出: 输出只有一行,即排序以后的结果(不包括末尾的0。 样例输入: 5 2 6 1 7 3 4 0 样例输出:

weixin_44441299的博客 359
上一篇: 网易c++引擎编辑器开发面试总结
下一篇: C/C++实现字符串的反向输出
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值