iOS(Object C) 快速排序

快速排序使用分治法,把一个数组分为两个子数组
本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。

快速排序的思想:

1.找到一个基准元素(通常是数组里的第一元素)

2.从右边开始遍历,找到一个比基准数小的值(minValue),将minValue放到基准值的初始位置,然后结束本轮遍历

3.从左边遍历,找到一个比基准数大的值(maxValue),将maxValue放到j的位置(j 为第2步里minValu ede 的index)

4.完成一轮遍历,将基准值放到i的位置;至此,就将数组完成了一遍快速排序. 然后再将基准值左边和右边的数组再做快速排序(递归思想),最后即可得到有序数组

#pragma mark 快速排序
- (void)quickSort1:(NSMutableArray *)array LeftIndex:(int)leftIndex RightIndex:(int)rightIndex
{if (leftIndex < rightIndex){int i = leftIndex;int j = rightIndex;//记录基准数int key = [array[i] intValue]; //默认左边第0个为基准数while (i < j){/* ** 1.1.先从最右边j开始查找比基准数小的值 ***/while (i < j && [array[j] intValue] >= key){j--;  //1.2如果大于等于基准数,则继续往左边找}//1.3.找到了比基准值小的数,则将找到的值调换到i的位置array[i] = array[j];/* ** 2.1.当在右边找到一个比基准数小的值时,就从i开始往后找比基准数大的值 ***/while (i < j && [array[i] intValue] <= key){i ++; //2.2.如果小于或者基准值,则继续往右找}//找到了比基准值大的数,则将找到的值调换到j的位置array[j] = array[i];}//一次遍历成功之后,将基准数放到正确的位置array[i] = @(key);//最后使用递归,将基准值左边的数组排列[self quickSort1:array LeftIndex:leftIndex RightIndex:i-1];//将基准值右边的数组排列[self quickSort1:array LeftIndex:i+1 RightIndex:rightIndex];}
}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/828011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

40. 【Android教程】AsyncTask:异步任务

在前面的章节有提到过&#xff0c;Android 系统默认会在主线程&#xff08;UI 线程&#xff09;执行任务&#xff0c;但是如果有耗时程序就会阻塞 UI 线程&#xff0c;导致页面卡顿。这时候我们通常会将耗时任务放在独立的线程&#xff0c;然后通过 Handler 等线程间通信机制完…

外贸干货|客户迟迟不付款,怎么催?

(一) Gentle reminder 温馨提醒 "Hello Mary, l hope this message finds you well. l wanted to kindly remind you about the payment for our agreed-upon order. We appreciate your business and would like to proceed with the next steps as soon as possible.…

DS32K查看内置寄存器数值

需要在debug的时候进行查看&#xff0c;先暂停&#xff0c;再打开EmbSys Registers窗口。 需要先将导出的内容选中并双击&#xff0c;不然复制出来会变成问号。右上角有个复制按钮&#xff0c;复制到剪贴板就行。譬如我这里选择了MCR寄存器&#xff0c;复制出来的就是这个寄存器…

下载nvm来配置node版本

背景提示&#xff1a;入职的公司项目久远&#xff0c;一直运行不起来&#xff0c;原来是我node版本太高&#xff0c;需要降级才行。然后找到这个nvm配置一下 准备工作 如果电脑有配置node的&#xff0c;需要先卸载掉才能配置nvm&#xff01;&#xff01;&#xff01;这是重点嗷…

Leetcode双指针刷题(一)

给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面…

播放相关知识-持续更新

一&#xff1a;基础知识&#xff1a; 1.编码方式&#xff1a; H264&#xff1a; H265&#xff1a; AV1&#xff1a; 1.多码流&#xff0c;为什么现在视频播放有这么多的码流&#xff08;100、200、300、400、500、600、800、1020等等&#xff09; 优点&#xff1a;用户不同的…

大模型解决方案:具体业务场景下的智能表单填充(附代码)

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 大模型应用向开发路径:AI代理工作流大模型应用开发实用开源项目汇总大模型问答项目问答性能评估方法大模型…

在组件页面刷新为什么触发不了组件的生命周期销毁钩子

当在前端开发中遇到组件页面刷新时&#xff0c;无法触发组件生命周期的销毁钩子&#xff08;如 Vue 的 beforeDestroy/destroyed 或 React 的 componentWillUnmount&#xff09;&#xff0c;通常有以下几种情况或原因&#xff1a; 页面刷新的本质&#xff1a;当浏览器页面执行刷…

JS -正则表达式

正则表达式 关于正则表达式&#xff0c;其实我写过几篇了&#xff0c;但是真正的正则表达式其实主要用于定义一些字符串的规则&#xff0c;计算机根据给出的正则表达式&#xff0c;来检查一个字符串是否符合规则。 我们来看一下&#xff0c;在JS中如何创建正则表达式对象。 语…

网络不更新,LOSS正常输出。

据别的文章说&#xff0c;学习率过高或者adam算法没加入eps参数也可能导致模型输出nan. 这个可以一开始就加上试试。先判断loss是否正常&#xff0c;再使用判断梯度是否正常。出现NAN。 loss.backward()for name, parms in model.named_parameters():if parms.grad is None or…

第67天:APP攻防-Frida反证书抓包移动安全系统资产提取评估扫描

思维导图 案例一&#xff1a;内在-资产提取-AppinfoScanne AppinfoScanner 一款适用于以 HW 行动/红队/渗透测试团队为场景的移动端(Android、iOS、WEB、H5、静态网站)信息收集扫描工具&#xff0c;可以帮助渗透测试工程师、攻击队成员、红队成员快速收集到移动端或者静态 WEB …

【禅道客户案例】小反馈,大杠杆!银丰新融「反馈管理」优秀实践

企业介绍 北京银丰新融科技开发有限公司&#xff08;简称&#xff1a;银丰新融&#xff09;成立于2000 年&#xff0c;自创立以来一贯专注于金融监管、风险管控等领域的信息系统建设&#xff0c;拥有目前国内金融风险领域规模庞大的信息技术服务团队。 银丰新融业务范围覆盖了…

VUE3 ref,props,生命周期

1.--ref属性 1.1代码 1.1.1子表 <template><div class"person"><h1>中国</h1><h2 ref"title2">北京</h2><h3>尚硅谷</h3><button click"showLog">点我输出h2这个元素</button>&l…

JavaScript注释:单行注释和多行注释详解

为了提高代码的可读性&#xff0c;JS与CSS一样&#xff0c;也提供了注释功能。JS中的注释主要有两种&#xff0c;分别是单行注释和多行注释。 在编程的世界里&#xff0c;注释是那些默默无闻的英雄&#xff0c;它们静静地站在代码的背后&#xff0c;为后来的维护者、为未来的自…

到底什么是爬虫

1. 引言 在数据驱动的世界里&#xff0c;网络爬虫&#xff08;Web Crawling&#xff09;技术扮演着获取和处理网上数据的关键角色。无论是为了数据分析、机器学习项目的数据集构建还是简单地监测网页变化&#xff0c;学习如何创建一个基本的网页爬虫可以大大提升你的工作效率和…

Vue页面生成导出PDF文件

第一种&#xff1a; 使用浏览器自带打印方法window.print(); 也可使用print-js插件&#xff08;原理相同&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>printDemo</title> </…

【Vue】常见的七大属性(描述+案例)

一、前言 最近&#xff0c;因为项目需要自己就去学习了一下Vue的相关知识&#xff0c;自己花了几天&#xff0c;结合官方文档和相应的视频学习了一下Vue,了解了Vue大概的一些属性&#xff0c;方法&#xff0c;特点等。接下来博主会将自己学习的相关内容通过博客的形式进行记录…

flutter类的细节

title: flutter类的细节(hexo发表blog的初尝试) abbrlink: 9bcefa22 date: 2024-04-22 00:26:25 tags: description: flutter里抽象类的解释 cover: “http://anime-haven.net/lainceleyesdh.jpg” {% p center logo large, Flutter近日学习所遇到的问题 %} {% p center h3, 是…

python教程(5更新中)

常用内建模块 Python之所以自称“batteries included”&#xff0c;就是因为内置了许多非常有用的模块&#xff0c;无需额外安装和配置&#xff0c;即可直接使用。 本章将介绍一些常用的内建模块。 datetime datetime是Python处理日期和时间的标准库。 获取当前日期和时间 …

Linux蓝牙驱动模拟HID设备(把Linux系统模拟成蓝牙鼠标和蓝牙键盘)

by fanxiushu 2024-04-24 转载或引用请注明原始作者。 在经过windows的蓝牙驱动开发模拟成HID设备的大风大浪之后&#xff0c; 现在回到linux下实现相同功能&#xff0c;简直就是如小孩嬉闹一样的轻松。 但无论如何&#xff0c;作为模拟蓝牙HID设备的windows&#xff0c;linux一…