quick_sort

快速排序(Quick sort) 一、简介 快速排序是(Quick sort)是对冒泡排序的一种改进,是非常重要且应用比较广泛的一种高效率排序算法。 二、算法思路 快速排序是通过多次比较和交换来实现排序,在一趟排序中把将要排序的数据分成两个独立的部分,对这两部分进行排序使得其中一部分所有数据比另一部分都要小,然后继续递归排序这两部分,最终实现所有数据有序。 大致步骤如下: 首先设置一个分界值也就是基准值又是也称为监视哨,通过该分界值将数据分割成两部分。 将大于或等于分界值的数据集中到右边,小于分界值的数据集中到左边。一趟排序过后,左边部 阅读详情

          由于冒泡排序是以相邻元素来比较和交换的,因此,若一个元素离其最终位置较远,则需要进行多次的比较

和移动操作。而快速排序则很好的解决了上述问题。所以,可以说快排是冒泡排序的改进版本。

         基本思想:首先选定一个元素作为中间元素,然后将表中所有元素和该元素相比较,将表中比中间元素小的

元素调到表的前面,比中间元素大的元素调到表的后面,再将中间元素放到这两部分之间作为分界点,由此而得

到一个划分。然后再对左右两部分分别进行快速排序(即对所得到的两个子表再采用相同的方式来划分和排序,

直到每个子表仅有一个元素或为空表为止,此时便得到一个有序表)。

 

          代码一:

          基本思想:p、r分别是待排数组的上下界。首先,用tem存下数组下界元素,腾出空间,待用。i指示的上界

的前一个元素空间。如果tem小于a[j],则不作任何操作。所以,在tem>=a[j]出现之前,a[j]之前的数组元素中已有

若干个大于tem的元素了。当第一次出现tem>=a[j]时,将i递增,此时a[i]中的元素是大于tem的,而此时a[j]是不大

于tem的。对调a[i]、a[j],就是将小于tem的元素调到数组前面,大于tem的元素调到数组后面。依此往复。遍历到

数组最后时,将tem调到i+1的位置即可。(tem就是所谓的中间元素了)

#include<iostream>
using namespace std;

int partition(int a[],int p,int r)
{
	int i,j,tem,temp;

	tem=a[r];
	i=p-1;

	for(j=p;j<=r-1;j++)
	{
		if(a[j]<=tem)
		{
			i++;

			temp=a[i];
			a[i]=a[j];
			a[j]=temp;
		}
	}

	temp=a[i+1];
	a[i+1]=a[r];
	a[r]=temp;
	
	return i+1;
}

			
void quick_sort(int a[],int p,int r)
{
	int q;

	if(p<r)
	{
		q=partition(a,p,r);

		quick_sort(a,p,q-1);
		quick_sort(a,q+1,r);
	}
}
		
int main()
{
	int a[100];
	int i,n;

	while(cin>>n,n)
	{
		for(i=0;i<n;i++)
			cin>>a[i];

		int p=0;
		int r=n-1;
		quick_sort(a,p,r);

		for(i=0;i<n;i++)
			cout<<a[i]<<" ";

		cout<<endl<<endl;
	}

	return 0;
}

 

           代码二:

           基本思想:把数组最前面的数指定为中间元素,即tem。然后从数组最后开始查找一数小于tem,赋到tem

的位置。那么,数组后就空出一位置,此时再从数组前依次查找一元素大于tem,放到空位置。则数组前又空出一

位置。重复上述过程,直到条件不满足。

int partition(int a[],int p,int r)
{
	int i,j,tem;

	tem=a[p];
	i=p;
	j=r;

	while(i!=j)
	{
		while(i<j && a[j]>tem)
			j--;
		if(i<j)
		{
			a[i]=a[j];
			i++;
		}

		while(i<j && a[i]<tem)
			i++;
		if(i<j)
		{
			a[j]=a[i];
			j--;
		}
	}
	a[i]=tem;

	return i;
}
			
void quick_sort(int a[],int p,int r)
{
	int q;

	if(p<r)
	{
		q=partition(a,p,r);

		quick_sort(a,p,q-1);
		quick_sort(a,q+1,r);
	}
}

           
           Attention:

           ①快排是就地排序,直接在原数组上操作,只需少量的辅助空间。

           ②平均耗时为O(nlog2n),并且隐含的常数因子很小,是一般的最佳实用选择。

           ③每次partition()的过程都可以确定一个数的最终位置。每次partition()中指定的中间元素(tem),理论上是

任意的(代码一指定数组最后的元素,代码二中指定数组最前面的元素为tem)。

           ④快速排序是不稳定的。

算法——Quick Sort 题目描述 Quicksort is a well-known sorting algorithm developed by C. A. R. Hoare that, on average, makes Θ(n log n) comparisons to sort n items. However, in the worst case, it makes Θ(n2) comparisons. Typ... 阅读详情

相关推荐

Android HWC硬件合成器实战:从SurfaceFlinger到显示驱动的完整流程解析

本文深入解析Android HWC硬件合成器从SurfaceFlinger到显示驱动的完整流程,揭示HWC如何优化图形性能并降低功耗。通过实战案例和调试技巧,帮助开发者掌握硬件加速的图层混合技术,提升移动设备的显示效率。

gaochao的博客 495

算法 - 快速排序(Quick_sort)

快速排序(Quick_sort)的特点就是:序列越乱越快,越有序越慢。最优情况:O(nlogn)每趟排序数据元素都能被平均分配成两个部分,形成一个完美的二叉树。最坏情况:O()也就是原序列相对最有序的情况,形成的树只有左子树和右子树,比较次数为:(n - 1) + (n - 2) + (n - 3)+……+ 1 = n * (n - 1)/2空间复杂度:O(1)..................

曾铎的博客 9595

c语言串口编程详解

串口: 一种异步通信接口,通常用于低速数据传输。RS-232: 最常见的串口标准,定义了电气特性、连接器和信号线。UART: 通用异步收发传输器,是实现串口通信的硬件模块。通过以上内容,你应能够理解并实现C语言在Windows和Linux平台上的串口编程。希望这本手册能帮助你在实际项目中顺利进行串口通信开发。如果有任何疑问或需要进一步的帮助,请随时提问。

jkzyx123的博客 2224

快速排序(Quick Sort)

快速排序的原理分析与算法实现

林景的博客 1518

笔记——Oracle19c

Oracle阅读笔记

weixin_63819458的博客 1352

python 写一个简单的 telegram bot (电报机器人)

replit.com 环境配置太恶心了,只能使用 poetry.poetry 这个名字是挺好听,用起来也是很垃圾,太恶心。heroku.com 注册登录不方便,需要各种验证。所以,部署的问题,目前搁置。

waterHBO的博客 3198

【C语言】QuickSort---快速排序

如果将最左边的值作为基准值(KEY)后,让left先走,那么相遇时的值会比KEY大,这时,如果交换KEY的值和下标,则。,我们就实现了KEY这个基准值的左边都比它要小,它的右边都比其要大了,也就是左小右大了。了吧,然后KEY的左子序列是不是都是比它小,右子序列都是比它大的。),当我们将最左边的值作为基准值时,就得让right先走了。这样,在其完成之后,其实也就是递归完成后,它的整体就成为了。,并且同时将KEY的下标也一并与相遇的数据。时,先将其共同指向的值和KEY指向的。的数据的时候停下来。

wzx0806的博客 1025

Akamai移动端Sensor数据采集与BMP风控机制深度解析

本文深度解析了Akamai在移动端风控中的核心机制,重点阐述了Sensor数据如何通过采集陀螺仪、加速度计等硬件信息,结合设备指纹生成连续且符合物理规律的行为轨迹。详细剖析了数据从采集、加密校验到通过BMP风控三重验证(校验位、时间差、数据逻辑)的完整流程,并提供了从模拟优化到自建风控模型的实用应对思路。

quiet的专栏 292

排序——快速排序(Quick sort)

概况 快速排序(Quick sort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1960年提出。 算法思路 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 快速排序算法通过多次比较和交换来实现排序,其排序流程如下: ......

努力中的老周的专栏 32万+

cursor AI代码编辑器IDE对接deepseek模型api;字节ai编辑器trae

参考: https://www.cursor.com/ https://platform.deepseek.com/https://www.cursor.com/下载安装后,注册账号登录即可 再高级里选择设置 再模型这注册模型: 模型名称一定要填正确,url地址填好,最后填上秘钥验证

weixin_42357472的博客 1万+

优快云 2

2

qq_62260432的博客 5237

Algorithm - Quick Sort Pro(Java)

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net package live.every.day.Algorithm.Sort; import java.util.Arrays; /** * @author LiveEveryDay * <p> * Basic Thought: * <p> * Quick Sort: * Split the sequence into.

了解➔熟悉➔掌握➔精通 4万+

YOLOv8改进策略【卷积层】| GnConv:一种通过门控卷积和递归设计来实现高效、可扩展、平移等变的高阶空间交互操作

HorNet: 利用递归门控卷积实现高效高阶空间交互GnConv(Recursive Gated Convolution,递归门控卷积)

Limiiiing的博客 325

quick sort与quick select

引言 median of medians quick select quick sort

xiaohaozi911的博客 688

android 蓝牙通讯demo

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Quick Sort要比Merge Sort快吗?

在实际应用中,快速排序(Quick Sort)通常比归并排序(Merge Sort)更快,尽管两者的平均时间复杂度均为O(n log n)。快速排序的优势在于其常数因子更小、缓存友好且原地操作(仅需O(log n)栈空间),而归并排序需要额外O(n)内存且操作更复杂。然而,快速排序在最坏情况下可能退化为O(n²),而归并排序始终保持O(n log n)的稳定性。选择算法时需权衡场景:快速排序适合通用随机数据,而归并排序适用于稳定性要求或避免最坏情况的场景。现代优化(如混合排序)可进一步提升性能。

杨航的专栏 327

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

quick sort and randomized quick sort

    The idea of classic quick sort is to divided the original array to two parts, and the when you doing the partition, you should make sure the element in left subarray always less than a pivot, and ...

skywatercomputer的专栏 361

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SWUST OJ Quick Sort

这里采用划分加递归的方式实现从小到大的排序方式 源码如下: #include<iostream> using namespace std; int partition(int *p,int l,int r) //Lumuto划分算法 { //利用Lumuto算法,用第一个元素作为中轴对子数...

qq_41760669的博客 672

Algorithm - Quick Sort(Java)

分享一个大牛的人工智能教程。希望你也加入到人工智能的队伍中来!

了解➔熟悉➔掌握➔精通 98

Quick Sort

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font

My Dream, My Empire! 979

快排quick_sort

【代码】快排quick_sort。

fbz123123258的博客 254

quick sort

思想: Divide and Conquer1. divide将未排序区域划分成左右2个区域,以位置划分。使得左边A[p,q]都不大于pivot的关键值,右边A[p+1,r]都不小于pivot的关键值。 (partition函数决定pivot位置并实现划分,pivot元素选取第一个元素). 2. conqure递归调用quicksort 对左右2个区域排序3. combine无操作——原地排序

zht_304的专栏 464

Quick Sort & Merge Sort

两种排序均采用分治的思想:quick sort先整体有序,再局部有序。归并排序先局部有序,再整体有序。 目录: quick sort 和 merge sort 的比较 quick sort merge sort 1. quick sort 和 merge sort 的区别于联系 1). 时间复杂度:都是O(nlogn),但是快速排序是平均O(nlogn),归并排序是最好最坏都是O(nlogn)...

weixin_43551229的博客 609

1101 Quick Sort

这道题暴力枚举每一个看看是否符合基准值的条件 肯定会超时,想来想去 那只有开两个数组,一个存当前点之前的最大值,另一个数组存当前点之后的最小值。

2401_87504271的博客 24
上一篇: HDU1042 N! 万进制
下一篇: shell_sort
lulipeng_cpp
博客等级 码龄15年 169粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值