iOS(Object C) 插入排序

server/2024/9/23 8:15:40/

插入排序的思想:

可以想象你在打牌,手里有一张牌2,

第一次摸到一张牌5; 5 比1 大,所以摸到的牌5放在1的右边; (此时手里的牌为 2->5)

第二次摸到一张牌3; 3比5小,所以3和5互换位置,再拿3和2比,3比2大,3不动(此时手里的牌为 2-> 3 -> 5)

第三次摸到一张牌1,1比5小,所以1和5互换位置;再拿1和3比,1比3小,所以1和3互换位置;再拿1和3比,1比2小,所以1和2互换位置; 

代码为:

- (NSMutableArray *)insertArray:(NSMutableArray *)array
{int j = 0;for (int i = 1; i < array.count; i ++)  //i表示摸到的牌的下标{j = i -1; //j 指的是手里的牌的下标while (j >= 0 && [array[j] intValue]> [array[i] intValue]){//交换j和j+1的值, 这里的j+1,其实就是array[i]的值[array exchangeObjectAtIndex:j+1 withObjectAtIndex:j];//j往后退一步,再继续与array[i]比大小j -= 1;}NSLog(@"插入排序,第 %d 轮后 array===%@",i,[array componentsJoinedByString:@" "]);}return array;
}

插入排序还有另一种写法,我个人觉得比较难理解:

就是比较牌的时候不交换位置,仅仅是把大的牌往后移,最后再把摸到的牌放到它该去的地方:

代码如下:

- (NSMutableArray *)insertArray:(NSMutableArray *)array
{//插入排序写法2.int j = 0;NSString * tempI; //每一次摸到的牌for (int i = 1; i < array.count; i ++)  //i表示摸到的牌的下标{tempI = array[i];j = i -1; //j 指的是手里的牌的下标while (j >= 0 && [array[j] intValue]> [tempI intValue]){array[j+1] = array[j];j -= 1;}array[j+1] = tempI;NSLog(@"插入排序,第 %d 轮后 array===%@",i,[array componentsJoinedByString:@" "]);}return array;
}


http://www.ppmy.cn/server/19995.html

相关文章

前端学习<四>JavaScript——54-原型链

常见概念 构造函数 构造函数-扩展 原型规则和示例 原型链 instanceof 构造函数 任何一个函数都可以被 new&#xff0c;new 了之后&#xff0c;就成了构造方法。 如下&#xff1a; function Foo(name, age) {this.name name;this.age age;//retrun this; //默认有这…

react 遇到的问题1 ——( 数据更新视图没更新)已解决

问题&#xff1a; 使用react开发项目时&#xff0c;使用useState 定义数据&#xff0c;通过定义的set方法修改数据&#xff0c;视图没有更新 原因&#xff1a; 在 React 中使用 useState 定义数据时&#xff0c;useState 返回一个数组&#xff0c;包含当前状态和更新的函数。…

【学习】软件测试自动化,是未来的趋势还是当前的必需

在当今快速迭代的软件开发周期中&#xff0c;速度和质量成为了企业生存的关键。随着DevOps实践的普及和持续集成/持续部署&#xff08;CI/CD&#xff09;流程的标准化&#xff0c;软件测试自动化已经从未来的趋势转变为当前的必要性。本文将探讨自动化测试的现状、必要性以及其…

ICCV 2021 | FcaNet: Frequency Channel Attention Networks 中的频率分析

ICCV 2021 | FcaNet: Frequency Channel Attention Networks 中的频率分析 论文&#xff1a;https://arxiv.org/abs/2012.11879代码&#xff1a;https://github.com/cfzd/FcaNet 文章是围绕 2D 的 DCT 进行展开的&#xff0c;本文针对具体的计算逻辑进行梳理和解析。 f ( u ,…

笔记:.NET的框架梳理及相关概念了解(“.NET Core“ “.NET“ “.NET Framework“)

一、.NET设计 架构&#xff1a;C/C程序是直接将源码编译成机器码&#xff08;CPU可以识别和运行的指令&#xff09;&#xff0c;对于不同CPU&#xff0c;其指令集不同&#xff0c;机器码也就不同&#xff0c;故&#xff1a;C/C程序编译时&#xff0c;需选择具体的CPU架构&…

深度学习基础:循环神经网络中的长期依赖问题

循环神经网络中的长期依赖问题 在深度学习中&#xff0c;循环神经网络&#xff08;RNN&#xff09;是一种经典的模型&#xff0c;用于处理序列数据&#xff0c;如自然语言处理、时间序列预测等任务。然而&#xff0c;传统的RNN存在着一个长期依赖问题&#xff0c;即在处理长序…

linux demo

1.1&#xff09;if case test the results #!bin/bash read -p “请输入你的成绩&#xff1a;” num if [ $num -ge 0 ] && [ $num -le 100 ];then if [ $num -ge 80 ] && [ $num -le 100 ];then echo “成绩优秀” elif [ $num -ge 60 ] && [ $num …

redis单线程模型

工作原理 在Redis中&#xff0c;当两个客户端同时发送相同的请求时&#xff0c;Redis采用单线程模型来处理所有的客户端请求&#xff0c;会依次处理这些请求&#xff0c;每个请求都会按照先后顺序被执行&#xff0c;不会同时处理多个请求。使得Redis能够避免多线程并发访问数据…