iOS算法--快速排序

算法 -- iOS开发用Objective_C / Swift3.0实现:快速排序 / 冒泡排序 / 选择排序 iOS开发用OC和Swift3.0实现快速排序 / 冒泡排序 / 选择排序 阅读详情

快速排序(举例为从小到大排列)

特性:

在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它采用的是内部循环(inner loop),这个可以在大部分的架构上很有效率地被实现出来。

时间复杂度:

最优: 每一次的flag刚好都可以平分整个数组,此时的时间复杂度为O(nlogn)

最坏: 每一次的flag刚好都是最大或者最小的数,此时的时间复杂度为O(n2)

平均: O(nlogn)

原理

每次扫描 碰到比基准值小的放到左边 碰到比基准值大的放到右边, 等左右两边的flag相遇时,将基准值赋值给当前的index对应的数据.
然后 接下来 进入递归 缩小范围
左边递归范围: left ->基准值赋值的index - 1
右边递归范围: 基准值赋值的index + 1 => right

简单来说就是 确保每次范围内的扫描结果是 左边小右边大,范围的获取是基于上次递归后的基准赋值index分割.

代码

+ (void)quickSortWithArray:(NSMutableArray<NSNumber *> *)array
                      left:(NSInteger)left
                     right:(NSInteger)right {
    
    if (left > right) {
    // 没得分区了,分区递归结束
        return;
    }
    
    NSInteger leftIndex = left;
    NSInteger rightIndex = right;
    
    定义一个基准数据
    NSInteger key = array[leftIndex].integerValue;
    
    while (leftIndex < rightIndex) {
        
        // 左边固定,从右边向左边扫描, 如果扫描的数据 < key 进行交换
        if (leftIndex < rightIndex && key <= array[rightIndex].integerValue) {
            rightIndex--;
        }
        
        if (leftIndex < rightIndex) {
            array[leftIndex] = array[rightIndex];
        }
        
        // 右边固定, 从左边向右边扫描, 如果左边的数据 <key 进行交换
        if (leftIndex < rightIndex && array[leftIndex].integerValue <= key) {
            leftIndex++;
        }
        
        if (leftIndex < rightIndex) {
            array[rightIndex] = array[leftIndex];
        }
        // 依次循环 直到此次内部排列 leftIndex == rightIndex 进入下一个递归
    }
    
    array[leftIndex] = [NSNumber numberWithInteger:key];
    
    // 递归排列leftIndex左边的顺序
    [self quickSortWithArray:array left:left right:leftIndex - 1];
    // 递归排列rightIndex右边的顺序
    [self quickSortWithArray:array left:leftIndex + 1 right:right];
}
iOS版快速排序(也含冒泡) iOS版快速排序(也含冒泡)。希望能帮到大家。 立即下载

相关推荐

ios-几种常用的排序方法-)OC.zip

常用的一些排序算法: 1.冒泡排序 2.选择排序 3.插入排序 4.快速排序

iOS算法总结-快速排序

快速排序 快速排序(Quick Sort) 的基本思想是:通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 动效图如下: 快速排序动效图 排序思路: 数组选第一个数,把比数小的放到数的左边,比数大的放到右边,结束后对左右两边的数组作重复处理即可。 排序演示: 假设数组为 [3

MinggeQingchun的博客 749

高分7(GF7)卫星数据制作平原地区DSM/DEM(三)——可信度分割

李国春(接上)

副组长的博客 1714

iOS 算法~快速排序实现

//联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪哄 一、概念:  快速排序: 是高快省的排序算法,在快速排序算法中,使用了分治策略。首先把序列分成两个子序列,递归地对子序列进行排序,直到整个序列排序结束。 优点:    快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放

石虎 2590

Cloudflare 5秒盾破解实战:Python补环境框架下的13次请求全解析

本文深入解析Cloudflare 5秒盾(5-second challenge)的工作原理,并提供基于Python环境的自动化应对策略。通过13次请求流程分解、动态脚本处理技术和环境指纹模拟,帮助开发者有效绕过这一复杂的人机验证机制,提升自动化工作效率。

weixin_30772105的博客 177

一文详解数据仓库、数据湖、湖仓一体和数据网格

本文对数据仓库、数据湖、湖仓一体、数据网格四个技术概念进行了辨析,并对它们的优势和局限给出了对比介绍。

oOBubbleX的博客 2593

iOS 开发中常用的排序(冒泡、选择、快速、插入、希尔、归并、基数)算法

1、冒泡排序:   冒泡算法是一种基础的排序算法,这种算法会重复的比较数组中相邻的两个元素。如果一个元素比另一个元素大(小),那么就交换这两个元素的位置。重复这一比较直至最后一个元素。这一比较会重复n-1趟,每一趟比较n-j次,j是已经排序好的元素个数。每一趟比较都能找出未排序元素中最大或者最小的那个数字。这就如同水泡从水底逐个飘到水面一样。冒泡排序是一种时间复杂度较高,效率较低的排序...

aqlomr7170的博客 299

QMI8658A和QMC5883L传感器校准全攻略:从零偏校准到椭球拟合

本文详细解析了QMI8658A和QMC5883L传感器的校准方法,从零偏校准到椭球拟合,涵盖了9轴运动传感器的核心误差来源及补偿技术。通过实战案例和数学建模,帮助开发者提升传感器精度,适用于无人机、AR/VR等智能硬件应用。

weixin_29189381的博客 157

iOS(Object C) 快速排序

iOS(Object C) 快速排序;快速排序的思想: 快速排序的思想: 1.找到一个基准元素(通常是数组里的第一元素) 2.从右边开始遍历,找到一个比基准数小的值(minValue),将minValue放到基准值的初始位置,然后结束本轮遍历 3.从左边遍历,找到一个比基准数大的值(maxValue),将maxValue放到j的位置(j 为第2步里minValu ede 的index)

wyz670083956的博客 677

STM32巡线小车PID调参实战:从五路灰度传感器数据到稳定运行的避坑指南

本文详细介绍了STM32巡线小车的PID调参实战,从五路灰度传感器数据处理到PID参数优化,提供了系统化的调试方法和常见问题解决方案。通过加权平均法计算偏移量,逐步调整比例、积分、微分参数,实现小车稳定巡线。文章还涵盖了定时器配置、控制周期优化及高级调试技巧,帮助开发者避开常见陷阱,提升巡线性能。

weixin_42570484的博客 192

25、格式化字符串攻击全解析

本文深入解析了格式化字符串攻击的原理与利用方式,涵盖缓冲区溢出与格式化字符串漏洞的区别,详细介绍了printf函数的工作机制、常见格式化说明符及其安全隐患。文章分析了三类典型编程错误导致的漏洞,并展示了如何通过恶意格式化字符串实现拒绝服务、内存读取和写入攻击。同时,提供了有效的防御措施,包括输入验证、使用安全函数、避免直接使用用户输入作为格式化字符串以及启用编译器安全选项,帮助开发者防范此类高危漏洞。

beer8的博客 83

iOS高级程序员进阶——基础算法篇

算法通常是指解决问题的方案和步骤,在编程中,更通俗的讲算法就是解决特定问题的一系列指令。算法要求对于一定规模内的输入,在有限时间内会获得所要求的输出。通常,一个算法的优劣由时间复杂度和空间复杂度来衡量。作为iOS开发者我们是否需要学习算法,毋庸置疑是需要的。就算是非常面向业务的开发需求,有算法基础的开发者也会编写出更加优质的代码,在输入规模扩大的情况下,这些优质的代码也会拥有更强的稳定性并使得应用程序表现出更好的性能。在笔试面试中,算法大多情况下也是必考部分。熟悉常用的基础算法是开发者的基本功。除了提高代码质量与面试加分外,学习算法也可以锻炼思维能力,提高开发者的逻辑思维能力与抽象建模能力。在技术迭代发展飞快的当今,掌握核心算法要比掌握一门应用技术更加重要。

FISCO BCOS(八)——— 一键部署 WeBase

环境 版本 Java Oracle JDK 8 至 14 MySQL MySQL-5.6及以上 Python Python3.6及以上 PyMySQL 1、获取部署安装包: wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/v1.5.4/webase-deploy.zip 2、解压安装包: unzip webase-deploy.zip 3、进入目录: c...

林中有神君 3606

iOS算法笔记-快速排序-OC实现

我们有许多的排序算法可以选择,冒泡、选择、快速、插入、希尔、归并、基数等,我今天来简单介绍一下不同算法的优缺点。 先普及一个概念: 算法稳定性:相同元素的前后顺序在任何情况都不会发生改变,这种排序成为稳定排序算法。反之成为不稳定排序算法。 冒泡排序 原理:重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复...

wangletiancsdn的博客 587

Codex 100个真实案例 - 全系列总结与Codex最佳实践全解析

历经100个案例的淬炼,我们终于来到了终点!本篇是整个系列的压轴之作——全面回顾100个案例的分类统计、提炼Codex使用的核心技巧和最佳实践、总结Prompt工程的精华要点、剖析常见错误及解决方案、展望AI编程的未来趋势,并为不同水平的读者规划学习路径。这不仅是一篇总结,更是一本Codex实战手册!

yueyeguzhuo的专栏 135

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...

ios使用object-c实现快速排序算法

在iOS开发中我们有许多时候用到排序算法,而快速排序是比较常用的算法代码才用递归的方法,内容如下:-(void)quickSort:(NSMutableArray *)array withLeftIndex:(NSInteger)leftIndex AndRightIndex:(NSInteger)rightIndex{            if(leftIndex&gt;=rightIndex...

iOSTerry的博客 461

数学建模模型总结

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

iOS常用算法之快速排序

快速排序(Quicksort)是对冒泡排序算法的一种改进。快速排序(Quick Sort)是实际开发中经常选用的一种排序方式。其排序原理: (1)首先设定一个分界值,通过该分界值将数组分成左右两部分。 (2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。 (3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边...

shuzhi57的博客 937

VB摄像头监控

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

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

iOS算法篇(一)快速排序算法

快速排序是当遇到较大数据时,排序快,高效的方法(公司面试时,基本上会被问到...) 该方法的基本思想是: 1.先从数列中取出一个数作为基准数。 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 3.再对左右区间重复第二步,直到各区间只有一个数。 简单地理解就是,找一个基准数(待排序的任意数,一般都是选定首元素),把比小于等于基准数的元素放到基准数的左边,把大

小华子的奋斗的博客 763

iOS算法(一)置快速排序算法

简单易于理解的快速排序,非专业术语易于学会运用.各大公司面试必备,希望能够帮到开发者

Ideainnet 1838

iOS算法(一)快速排序算法

快速排序是当遇到较大数据时,排序快,高效的方法(公司面试时,基本上会被问到...) 该方法的基本思想是: 1.先从数列中取出一个数作为基准数。 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 3.再对左右区间重复第二步,直到各区间只有一个数。 简单地理解就是,找一个基准数(待排序的任意数,一般都是选定首元素),把比小于等于基准数的元素放到基准数的左边,把大

MOKA 4955

iOS开发之快速排序算法

- (void)quickSortArray:(NSMutableArray *)array withLeftIndex:(NSInteger)leftIndex andRightIndex:(NSInteger)rightIndex { if (leftIndex >= rightIndex) {//如果数组长度为0或1时返回 return ; ...

weixin_34236869的博客 163

一趟快速排序的实质结果是什么_多图警告手撕排序算法 iOS进阶必备

作者 | Lefex来源 | 超越技术整理 | 程序员小吴冒泡排序冒泡排序是通过比较两个相邻元素的大小实现排序,如果前一个元素大于后一个元素,就交换这两个元素。这样就会让每一趟冒泡都能找到最大一个元素并放到最后。以[ 8, 1, 4, 6, 2, 3, 5, 7 ]为例,对它进行冒泡排序:代码实现:+(NSArray*)bubbleSort:(NSArray*)unsortDa...

weixin_29112009的博客 381

iOS算法:用OC实现一个快速排序

用OC实现一个快速排序 算法实现: - (NSArray *)quickSortWithArray:(NSArray *)array { if (!array) { return @[]; } if (array.count == 0 || array.count == 1) { return array; } NSMutab...

weixin_33872660的博客 290
上一篇: iOS开发--UICollectionView横竖屏旋转的适配
下一篇: iOS算法--冒泡排序
单细胞的逻辑
博客等级 码龄10年 19粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值