快速排序(v 3.0)

前面选的轴为左边和中间,当然,这次的轴为数组的最右边,先看看吧。


/*
* 1, 以最右边的数s为比较的标准;
* 2, 未处理完毕的数组分为四个部分,从左到右依次为小于s的部分,大于s的部分,未比较部分和最右的s;
* 3, 小于s的部分最大下标是i;大于s的部分最大下标是j,刚开始时i为-1,j为0;
* 4, 在排序的过程中,一发现不大于s的数,i++,并将原i位置的数与新发现的数交换位置。一次循环完成后将s放到i+1的位置;
* 5, 以新s所在位置将原数组切割为两部分,进行新的递归。
*/
public static void QuickSort(int[] number)
{
QuickSort(number, 0, number.length - 1);
}

private static void QuickSort(int[] number, int left, int right)
{
if (left < right)
{
//q为新的切割点,分为大于s和小于s两个新的部分以进行递归
int q = partition(number, left, right);
//递归小于s的部分,在整个算法中,先排好左边的,再排右边的
QuickSort(number, left, q - 1);
//递归大于s的部分
QuickSort(number, q + 1, right);
}
}

private static int partition(int[] number, int left, int right)
{
int s = number[right];
int i = left - 1;

for (int j = left; j < right; j++)
{
//找出不大于s的数放在左边
if (number[j] <= s)
{
i++;
swap(number, i, j);
}
}
//找完后不大于s的数的下标已用到i,根据算法将s放到它们后面(i+1)的位置
swap(number, i + 1, right);
//返回s的位置,将原数组切分为两个新的数组,进行新的递归
return i + 1;
}

private static void swap(int[] number, int i, int j)
{
int t;
t = number[i];
number[i] = number[j];
number[j] = t;
}


小结:快速排序的效率与轴的选择有关,在这三个版本中,传说V3的效率最高,单循环+递归。这三个算法也都很好理解,我直接使用良葛格的Java代码,只是加上自己的理解作为注释,算是读书笔记吧。不当的地方请大家多多指正,不胜感激。

下面是原文链接:
http://caterpillar.onlyfun.net/GossipCN/AlgorithmGossip/QuickSort3.htm
随机快速排序 /** * 快速排序3.0 —— 随机快排,时间复杂度收敛于 O(NlogN) */ public class QuickSort { /** * * @param arr 需要排序的数组 * @param L 需要排序部分的左边界 * @param R 需要排序部分的右边界 */ public static void process(int[] arr,int L,int R){ if(L<R){ //在L,R范围上随机选择一个数,放在R位置上,把它作为划分值 立即下载

相关推荐

【探秘】二维异形件重叠移除算法:从度量到消除的实战解析

本文深入解析二维异形件重叠移除算法的核心技术与实战应用,涵盖重叠度量、零件扰动策略及消除方法。通过NFP(临界多边形)技术、空间分区加速等优化手段,有效解决异形件排版中的重叠问题,提升材料利用率和计算效率。适合制造业、CAD软件开发者及算法工程师参考。

weixin_28698059的博客 251

快速排序三个版本(1.0,2.0,3.0)

快速排序 三个版本

qq_45599754的博客 629

单精度浮点数存储、双精度浮点数存储

单精度浮点数存储、双精度浮点数存储

fancynthia的博客 1306

快速排序3.0

核心是要懂得与荷兰国旗问题结合,并采取递归分别排好左右两组的序。

Mysterioser的博客 180

【Docker】搭建一个媒体服务器插件后端API服务 - MetaTube

本教程基于群晖的NAS设备DS423+的docker功能进行搭建,DSM版为 7.2.1-69057 Update 5。MetaTube是一个媒体服务器插件,主要用于Emby和Jellyfin媒体服务器。它的主要功能是从互联网上抓取内容并响应 JSON 数据,然后通过预安装的 MetaTube 插件请求服务器并下载相应的元数据,以与 Jellyfin/Emby 服务器配合使用。使用 MetaTube 的步骤大致如下:部署后端:首先,需要部署一个名为​ 的后端 API 服务器来抓取内容。

小小笔记大大用处 1万+

一篇教你杰理63系列蓝牙双设备主从连接传输数据过程及配置

首先打开632sdk的app_config.h文件,将宏CONFIG_APP_SPP_LE写0,将宏CONFIG_APP_MULTI写1,对应的CONFIG_BT_GATT_CLIENT_NUM写1代表我只连接一个主机设备。属性都可以修改为自己想要的属性,然后关掉文件,双击gatt_inc_generator.exe文件运行,就会自动弹出生成/更新后的gatt_profile_cfg.h文件,然后里面就是我们代码里面所需要的配置,都是十六进制表示,找到我们刚刚添加的服务属性配置,复制到代码里面去。

xiaolizaixian的博客 1375

排序算法之快速排序

快速排序

weixin_42575720的博客 219

手把手教你用Cesium和RayMarching实现逼真体积云(附完整Shader代码)

本文详细介绍了如何利用Cesium和RayMarching技术实现逼真的体积云效果,包括环境准备、核心逻辑、云层建模和光照增强等关键步骤,并提供了完整的Shader代码。通过噪声函数选型、动态风场模拟和多重散射近似等技术,开发者可以在数字地球可视化项目中创建沉浸式天气效果,显著提升场景的真实感。

weixin_29230649的博客 415

快速排序 — — 递归、非递归实现【十大经典排序算法】

快速排序 — — 递归、非递归实现【十大经典排序算法】

weixin_45565886的博客 401

国科大《人工智能原理与算法》2021年期末试题+2024经验(2025指南)

2021年期末试题+24年复习指南

MatsumotoChrikk 2926

论文阅读:Training language models to follow instructions with human feedback

这篇论文的目标是通过引入一种基于人类反馈的训练方法,来让语言模型更好地按照用户意图行事。这是因为大规模语言模型虽然强大,但有时候会生成不准确、有偏见或者对用户无帮助的内容,这说明它们和用户的需求之间存在一定的“错位”。论文提出了一个新方法,将 GPT-3 进行优化,称为示例数据与监督学习:让人类标注员生成一些正确行为的示例,并使用这些示例来初步优化模型。比较数据与奖励模型:让标注员比较模型生成的多个输出,并将其排序,从中学到模型输出的优劣规则。强化学习优化:基于这些规则,使用强化学习算法进一步优化模型。

CSPhD-winston的博客 1715

[算法入门]--十分钟弄懂快速排序

浅入深出快速排序,C++实现,虽然使用的是C++实际上除了动态数组 STL部分其他C语言玩家都是可以放心无毒食用的。

一个前端人,游戏开发魂。 1059

Docker 环境 Playwright MCP 部署全流程指南

Docker部署Playwright MCP全流程指南 本文详细介绍了使用Docker容器化部署Playwright MCP的完整流程,涵盖镜像拉取、容器启动、配置优化和问题排查。主要内容包括: 核心部署步骤:通过官方镜像快速搭建环境,支持自定义端口和数据持久化 关键配置要点:详解网络设置、持久化目录挂载和环境变量配置 服务验证方法:通过日志检查和服务连通性测试确保部署成功 客户端集成:提供VS Code等IDE的配置示例 常见问题解决:针对浏览器启动超时、跨域限制等问题给出解决方案 实战案例:演示自动化爬

勤奋的码农 1473

快速排序算法

快速排序算法,从荷兰国旗引出快速排序,快速排序版本迭代,V1~V2~V3,有图有真相~

hacknetY的博客 208

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

BGE Reranker-v2-m3步骤详解:点击「[特殊字符] 开始重排序」背后的技术链路

本文介绍了如何在星图GPU平台上自动化部署BGE Reranker-v2-m3重排序系统。该平台简化了部署流程,用户可快速搭建本地化文本相关性分析环境。该系统能高效完成智能客服问答匹配、搜索结果优化等任务,通过语义理解对候选答案进行精准排序,提升信息检索效率。

weixin_35871529的博客 584

android 蓝牙通讯demo

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

模块化多电平变换器MMC的NLM与CPS-PWM调制策略仿真实现(交流3000V-直流5000...

模块化多电平变换器MMC两种调制策略实现(交流3000V-直流5000V整流)仿真,单桥臂二十子模块,分别采用最近电平逼近NLM与载波移相调制CPS-PWM实现,仿真中使用环流抑制,NLM中采用快速排序,两个仿真动稳态性能良好,附带仿真介绍文档,详细讲述仿真搭建过程,并附带参考文献与原理出处,内容详实。动态测试时,NLM方案的THD居然只有1.8%,比CPS-PWM的0.9%还差点。仿真文档里详细记录了每个模块的参数设置,比如子模块电容取的是15mF,这个值大了影响动态响应,小了电压波动hold不住。

2503_93933470的博客 179

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

模块化多电平变换器MMC的NLM与CPS-PWM调制策略仿真实现:交流3000V-直流5000...

模块化多电平变换器MMC两种调制策略实现(交流3000V-直流5000V整流)仿真,单桥臂二十子模块,分别采用最近电平逼近NLM与载波移相调制CPS-PWM实现,仿真中使用环流抑制,NLM中采用快速排序,两个仿真动稳态性能良好,附带仿真介绍文档,详细讲述仿真搭建过程,并附带参考文献与原理出处,内容详实。动态测试时,NLM方案的THD居然只有1.8%,比CPS-PWM的0.9%还差点。仿真文档里详细记录了每个模块的参数设置,比如子模块电容取的是15mF,这个值大了影响动态响应,小了电压波动hold不住。

onvadhFTH的博客 301

【算法理解】—— 快速排序 v2.0

针对算法【快速排序】的深入分析和理解。

鸡蛋的专栏 1691

快速排序优化-三路快速排序法 Quick Sort 3 Ways

三路快速排序法 Quick Sort 3 Ways 对拥有大量重复键值的数组进行排序时,上篇使用了双路快速排序进行优化,还有一个更加经典的实现方式 三路快速排序法。 三路快速排序的思想其实非常简单。我们之前实现的快速排序,都是将整个数组分成两部分,"<=v"的部分和">=v"的部分。而三路快速排序则把整个数组分成三部分,"<v"部分、"=v"部分和">v"部分。我们可以想象一下,这样分割成三部分之后,在递归的过程中,对于"=v"的部分就可以不用管了,只需要递归的继续对"<v

bluebiy的专栏 1742

Risk-V编程,实现快速排序

提供一个最为基础的使用RISK-V实现的快速排序算法

damogu_lv的博客 1703

针对重复键值的3路快速排序算法

针对待排序列中农存在大量重复键值的情况,上一节讲了一种对快排算法的优化,代码如下: template int __patition(T arr[], int l, int r) { swap(arr[l], arr[rand() % (r - l + 1) + l]); T v = arr[l]; int i = l + 1, j = r; while(true)

liqian_blog的博客 676

快速排序(二) jdk源码中如何优化快速排序

<br />     快速排序是一种相当棒的排序方案,相关理论内容可以参见快速排序(一) 原理介绍<br />     在jdk的[java.util.Arrays]类中,有一个sort的函数,它实现对很多数据结构进行的排序方法,其中sort(int[] a)中主要使用的是优化后的快速排序法,本文正是基于此来讲解如何优化快速排序算法。<br /> <br />java源代码:<br />public class SourceSort { public static void main(String[]

lengyuhong的专栏 5412

基于蓝耘元生代MaaS平台DeepSeek-V3.2-Exp与V3.1-Terminus模型对比测评:性能相近,价格大幅下降

DeepSeek-V3.2-Exp与V3.1-Terminus对比测评显示,新版模型在性能基本持平的情况下实现显著成本优化。V3.2-Exp采用DSA稀疏注意力机制,长文本处理效率提升2-3倍,内存使用降低30-40%,API价格最高降幅达75%。测评涵盖逻辑推理、代码生成等多项任务,两模型表现相近,但V3.2-Exp在输出密集型应用上可节省64%以上成本。建议新项目优先采用V3.2-Exp,现有系统可在10月15日前完成迁移验证。这一升级展示了AI技术优化与成本控制的有效结合。

Liudef06的博客 1万+

图解快速排序及双路三路快速排序

前言 之前我们介绍了交换类排序中的冒泡排序,这次我们介绍另一种交换类排序叫做快速排序。快速排序的优点是原地排序,不占用额外空间,时间复杂度是O(nlogn)。 当然,对于快速排序来说,它也是有缺点的,它对于含有大量重复元素的数组排序效率是非常低的,时间复杂度会降为O(n^2)。此时需要使用改进的快速排序—双路快速排序,在双路快速排序的基础上,我们又进一步优化得到了三路快速排序。 快速排序 快速排...

子居的博客 1190

Java 算法:三路快速排序法

思想: 三路快速排序是将数组分成3个部分,小于V,等于V,大于V。 在递归的过程中等于V的部分就不需要进行管理,只需要对小于V和大于V进行管理。 lt表示小于V的最后一个元素。 gt表示处理后的大于V的第一个元素。 对i元素的情况进行讨论: 1.e == v:e就纳入等于v的部分中,然后i ++。 2.e < v:和等于v的第一个元素进行位置交换,接着维护lt,lt ++,...

抛弃幻想,准备斗争 1484
上一篇: 快速排序(v 2.0)
下一篇: 关于document.cookie的使用
rush2012
博客等级 码龄14年 2粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值