八大排序——快速排序

C51红外接收与发射控制及原理编码与解码 基于38khz的NEC协议红外发射简易电路图NEC协议产生红外光数据编码 0 1结合程序红外接收接收电路解码过程解码代码 红外发射 通过通过红外二极管发射红外光,三极管的状态来控制。 红外模块一般都是三个引脚,vcc,gnd,dat,通过控制dat口的来控制发射红外光。 简易电路图 将数据口连接到单片机的引脚为上,控制io口的电平状态,来控制三极管的导通状态,从而发射红外光。 NEC协议 NEC协议特点:8位地址和8位命令为提高可靠性,地址和命令都传输2次,脉冲间隔调制38kHz载波频率。 包含引导码, 阅读详情

作为一个学后台的同学,如果你不会希尔排序,我可以认为你学的不够,但如果你不会快速排序,那么我就要偷偷笑你了。快速排序算法最早由图灵奖的获得者Tony Hoare设计出来,更牛逼的是,这个算法被列为了20世纪十大算法之一。对,没错,是十大算法,不是十大排序算法,这足以看出这个排序算法在学界中大牛心目中的地位,我们这些程序猿还有什么理由不去学习它?不说玩笑话,下面让我们真正的体会一下快速排序。

快速排序算法

快速排序(Quick Sort),其基本思想为:在序列中选出一个元素作为“枢纽”,经过一趟排序将序列分割成两部分,其中一部分均比“枢纽”元素小,另一部分均比“枢纽”元素大,然后把这两部分作为新的序列执行同样的操作,直到元素数无法进行分割为止。细心的同学会发现,整个操作其实是一个递归调用,排序会将“枢纽”元素放置到合适的位置(合适的位置意味着它的位置不需再改变),而其它元素都会放置到合适的区域(注意的说的是合适的区域),而分割的作用就是使被放到合适位置的元素越来越多,合适的区域越来越精确,直到合适的区域精确到成为一个位置为止(仔细体会)。小二,上代码:

#include <stdio.h>

void sort(int a[], int left, int right)
{
    if(left >= right)//如果left大于或者等于right就代表已经整理完成一个部分了
    {
        return;
    }
    int i = left;
    int j = right;
    int key = a[left];//取下标为left的元素为“枢纽”元素,并将其赋值给key

    while(i < j)//当i和j"相遇"的时候,说明所有元素都被比较了一遍,这时候就不用再循环
    {
        while(i < j && key <= a[j])
        {
            j--;//向前寻找
        }

        a[i] = a[j];//数值覆盖
        while(i < j && key >= a[i])
        {
            i++;//向后寻找
        }
        a[j] = a[i];//数值覆盖
    }

    a[i] = key;//将“枢纽”元素放在合适的位置
    sort(a, left, i - 1);//用同样的方式对分出来的左边的小组进行同上的做法
    sort(a, i + 1, right);//用同样的方式对分出来的右边的小组进行同上的做法
}
void main()
{
    int a[]={5,6,1,4,9,2,9};
    int i;
    int length=sizeof(a)/sizeof(int);
    sort(a,0,length-1);
    for(i=0;i<length;i++){
        printf("%d\t",a[i]);
    }
    printf("\n");
}

光看代码很难理解其中的变换过程,下表是第一次排序的数值变化,大家可以体会一下:
这里写图片描述
其中标黄色的部分为被变化的值,从图中也解答了大家对20和25行代码注释的一个疑问(即数值覆盖会不会造成数据丢失),大家可以看到,第一次覆盖,其实是“枢纽”元素被覆盖,而我们已经提前将“枢纽”元素赋给了key,而其后的数值覆盖覆盖的都是冗余的值,因为我们每覆盖一次都没有将之前位置的值清空,那么它就是冗余的,覆盖它不会造成数据丢失。
注:快速排序的时间复杂度为O(nlogn)。

计算机组成原理课程设计_微程序控制的简单模型机设计 微程序控制的简单模型机设计 要求 基本要求 完成一个简单主机的设计,模型机应具备如下能力:在自行设计的指令集基础上,运行自行编写的简单用户程序,实现特定运算功能。 弹性要求 在此基础上,完成必要的扩展,实现模型机的功能扩展设计,包括:实现多种运算功能(指令集的扩充)、支持更为丰富的寻址方式、有更为完善的微程序设计等。 实验软件和硬件环境 QuartusII, FPGA计算机组... 阅读详情

相关推荐

SQL2000在Win10上安装完整指南:兼容模式、SP4补丁与远程连接配置

数据库兼容性是老系统迁移与运维中绕不开的难题。当历史遗留的SQL Server 2000遭遇全新的Windows 10环境,安装程序常因系统版本检测失败而拒绝运行,这背后是旧版安装程序与NT内核版本间的识别错位。通过兼容模式模拟旧系统环境、以管理员身份运行安装程序,并处理注册表挂起与杀毒软件干扰,即可突破基础安装障碍。安装后的SP4补丁与TCP/IP端口配置,则是保障服务稳定与远程连接的关键。这一技术路径广泛适用于制造企业MES、进销存系统及医院HIS等仍依赖老旧数据库的场景,为IT运维与数据迁移测试提供了

weixin_29266679的博客 437

快速排序算法

1.快速排序算法 快速排序算法由图灵奖获得者Tony Hoare设计出来,被列为20世纪十大算法之一。 快速排序(Quick Sort)的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 假设现在需要对数组{50,10,90,30,70,40,80,60,20}进行排序,则代...

Zz8474的博客 374

QT+SOEM主站协议库实战指南—从编译到嵌入式应用

本文提供了一份QT与SOEM开源EtherCAT主站协议库的集成实战指南。详细介绍了在Windows和Linux平台下编译SOEM库的步骤,并讲解了如何将其无缝集成到QT项目中,构建具备实时监控与控制功能的工业上位机应用。内容涵盖从环境搭建、核心协议开发到嵌入式部署与优化的全流程,为开发高性价比、自主可控的工业控制解决方案提供完整路径。

u6v7w8x的博客 437

快速排序

快速排序 介绍: 快速排序通常明显比同为O(nlogn)的其他算法更快,因此常被采用,而且快 排采用了分治法的思想,所以在很多笔试面试中能经常看到快排的影子。可 见掌握快排的重要性。 快速排序(Quick Sort)由图灵奖获得者Tony Hoare发明,被列为20世纪十 大算法之一,是迄今为止所有内排序算法中速度最快的一种。冒泡排序的升 级版,交换排序的一种。快速排序的时间复杂度为O(nlog(...

Arnoldleslie的博客 398

基于深度学习的Person Re-ID(综述)

一. 问题的提出        Person Re-ID 全称是 Person Re-Identification,又称为 行人重检测 or 行人再识别,直观上可以通过两种思路进行比对,一种是 通过 静态图像(still-image)进行特征比对,另一种是通过视频的时序特征(temporal)进行 Video Re-Id。        不管是采用 图像特征比对的方法 还是 结合时序特征比

跟随技术的脚步-linolzhang的专栏 2万+

JMeter压测Dubbo接口的完整落地方案(适配3.x)

Dubbo作为主流Java微服务RPC框架,其接口压测长期面临协议私有、注册发现复杂、序列化耦合度高等技术门槛。理解Dubbo基于TCP长连接、泛化调用与SPI扩展机制的核心原理,是实现稳定压测的前提;技术价值在于绕过HTTP网关直击服务核心链路,保障大促等关键场景的性能可信度;典型应用场景包括电商订单链路压测、风控/库存等内部Dubbo服务SLA验证,以及CI/CD中性能左移实践。本文聚焦Dubbo 3.x版本,提供零第三方插件、可复用、避坑的JMeter Java Sampler落地路径。

weixin_33700809的博客 549

八大排序时间复杂度与稳定性

因为每一趟排好一个数据后,会把这个数组一分为二,而被分成的这两个数组总元素少1(可忽略,因为到最后这个总元素不会相差原始元素个数太多,若差10则说明有1024个数据)。用二分法,类比二叉树。n个数据,总共分成了 log n 层,每次都要对上一层的数据全部处理完,才能形成了新的下一层的新数据,再来进行下次的处理。每一趟的这一个待插入数据,都要向前挨个找,找到满足的为止,最多走 n-i-1 次,最少直接插入。每一趟能排好一个数据,一共n个数据,如果前n-1个都排好了,那么最后一个就不用排了。

m0_75062065的博客 1万+

基于深度学习的柑橘病害检测系统——YOLOv8 + UI界面 + 数据集

深度学习是机器学习的一种重要分支,它通过构建多层的神经网络(尤其是卷积神经网络CNN)来从大规模的数据中学习特征。近年来,深度学习特别是在计算机视觉领域取得了显著的进展,成为图像分类、目标检测、图像分割等任务的主要技术。对于农业病害检测问题,深度学习通过对大量带标签的病害图像进行训练,能够自动识别不同类型的病害,并判断病害的程度。通过图像中目标(病害区域)的边界框,可以快速定位病害区域,进一步分析其影响范围。

YOLO 1042

十大经典排序算法总结整理

参考文章: 十大经典排序算法最强总结:https://www.cnblogs.com/guoyaohua/p/8600214.html 排序算法总结:https://www.runoob.com/w3cnote/sort-algorithm-summary.html 术语说明 内排序:所有排序操作都在内存中完成; 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数...

ytusdc的博客 6948

USLE模型(1.2):LS因子的计算

基于USLE的甘南川西北土壤侵蚀研究。准备好30米分辨率的dem。

所有专家都曾始于新手 3481

芒果YOLOv8改进16:检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

YOLOv8代码改进教程:即插即用|新颖轻量化非对称多级压缩LADH检测头🎈

包括YOLOv5、YOLOv7、YOLOv8等模型改进 5611

最快的排序算法是什么

最快的排序算法是什么,很多人的第一反应是快排,感觉QuickSort 当然应该最快了,其实并非如此,快排是不稳定的,最坏情况下,快排序并不是最优,Java7 中引入的 TimSort 就是一个结合了插入排序和归并排序的高效算法. Timsort最早是 Tim Peters 于2001年为 Python 写的排序算法。自从发明该算法以来,它已被用作Python,Java,Android平台和GNU ...

温故而知新 1万+

YOLOv10涨点改进:SPPF原创自研创新 | SPPF创新结构,重新设计全局平均池化层和全局最大池化层,增强全局视角信息和不同尺度大小的特征

SPPF原创自研创新

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 2085

八大排序之快速排序

#include &amp;lt;iostream&amp;gt; using namespace std; template &amp;lt;class T&amp;gt; void QuickSort(T* numbers, int low, int high); int main() { int low = 0, high = 0; cin &amp;gt;&amp;gt; low &amp;gt;&amp;gt;

Alexander的博客 249

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 锁屏 相关源码待公开

java快排_八大排序-快速排序(手写快排)

概要快速排序由C. A. R. Hoare在1960年提出,是八大排序算法中最常用的经典排序算法之一。其广泛应用的主要原因是高效,核心算法思想是分而治之。快速排序经常会被作为面试题进行考察,通常的考察思路是快排思想、编码实践之手写快排以及进一步对快排的优化。事实上在Java标准库中Arrays类的sort方法里源码也正是使用了优化后的快速排序(具体源码以及优化分析后续会推文讲解),掌握快排算法对于...

weixin_39895995的博客 428

计算机控制技术及应用

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

快速排序时间复杂度_算法面试八大排序(上)

点击上方 “ 言淦说 ”,选择 “加为星标”第一时间关注各种技术干货!前言八大排序包含:冒泡排序、选择排序、插入排序、快速排序(快排)、归并排序、基数排序、希尔排序、堆排序。本文主要讲述前5种,其中,建议冒泡排序、选择排序、插入排序可以放在一起对比;快速排序和归并排序可以放在一起对比。注:本文的排序采用Golang实现。排序基础1.时间复杂度、空间复杂度以及大O表示法,这里不再赘述2.线...

weixin_39683176的博客 623

android 蓝牙通讯demo

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

DS初阶:八大排序之堆排序、冒泡排序、快速排序

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法

weixin_51142926的博客 5776

八大排序算法(希尔排序、快速排序、堆排序)

八大排序算法-复杂算法(希尔排序、快速排序、归并排序)希尔排序-插入排序的扩展快速排序-冒泡排序的扩展堆排序 希尔排序-插入排序的扩展 function shellSort(arr) { var len = arr.length; for (var fraction = Math.floor(len / 2); fraction &amp;amp;amp;gt; 0; fraction = Math.floor(fr...

叶素凡 1217

八大排序快速排序

八大排序快速排序

m0_64616651的博客 419

java 快排_八大排序-快速排序(搞定面试之手写快排)

概要快速排序由C. A. R. Hoare在1960年提出,是八大排序算法中最常用的经典排序算法之一。其广泛应用的主要原因是高效,核心算法思想是分而治之。快速排序经常会被作为面试题进行考察,通常的考察思路是快排思想、编码实践之手写快排以及进一步对快排的优化。事实上在Java标准库中Arrays类的sort方法里源码也正是使用了优化后的快速排序(具体源码以及优化分析后续会推文讲解),掌握快排算法对于...

weixin_39765869的博客 345
上一篇: 八大排序——直接插入排序
下一篇: 去哪儿网-后台开发-一面
Jeaforea
博客等级 码龄10年 30粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值