iOS(Object C) 冒泡排序

server/2024/9/24 6:18:07/

有一个无序数组,用冒泡排序法将其排成有序数组

NSMutableArray * array = [[NSMutableArray alloc]initWithObjects:@"31",@"22",@"51",@"3",@"2",@"1",@"4", nil];

冒泡排序的思想:

第一次比较:
1.将index=0和index=1的值进行比较,

2.如果index=0 > index=1,则互换他俩的位置

3.如果index0 < index=1, 则数组保持不变

4.以此类推,第二次比较的两个值为 index1 和 index2

5.需要比较 array.count-1趟

以下为最简单的冒泡排序代码

#pragma mark 冒泡排序
- (NSMutableArray *)bubbleSortWithArray:(NSMutableArray *)array
{for (int i = 0; i < array.count -1 ; i++){for (int j = 0; j < array.count -1 -i; j++){if ([array[j] intValue] > [array[j+1] intValue]){//互换位置[array exchangeObjectAtIndex:j withObjectAtIndex:j+1];}}}return array;
}

但是还可以再优化:如果一个数组排到第2趟就已经有序,则不需要再排下去(增加时间复杂度)

不需要排下去的一句就是 不需要互换位置,我们可以设定一个值来检测是否需要换位置,如果不需要再换,则可以跳出循环:

#pragma mark 冒泡排序
- (NSMutableArray *)bubbleSortWithArray:(NSMutableArray *)array
{for (int i = 0; i < array.count -1; i ++){//默认不需要换位置BOOL isChange = NO;for (int j = 0; j < array.count - 1 -i; j ++){if ([array[j] intValue] > [array[j +1 ] intValue]){//需要换位置isChange = YES;[array exchangeObjectAtIndex:j withObjectAtIndex:j+1];}}//循环完一趟,如果不需要换位置,则说明这个数组已经是有序的if (isChange == NO){break;}}return array;
}


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

相关文章

中颖51芯片学习9. PWM(12bit脉冲宽度调制)

中颖51芯片学习9. PWM&#xff08;12bit脉冲宽度调制&#xff09; 一、资源简介二、PWM工作流程三、寄存器介绍1. PWMx控制寄存器PWMxCON2. PWM0周期寄存器PWM0PH/L3. PWM1周期寄存器PWM1PH/L4. PWM0占空比控制寄存器PWM0DH/L5. PWM1占空比控制寄存器 PWM1DH/L6. 占空比寄存器与…

esp32的idf开发框架的目录结构

1、创建工程mytest&#xff0c;生成如下的目录结构。 idf.py create-project mytest 2、在mytest.c中添加如下代码&#xff0c;该代码功能是控制GPIO_2引脚上的LED闪烁 #include <stdio.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h&q…

tomcat更换应用目录

有时候要更换tomcat的应用目录&#xff0c;使之不在webapps下面。经过实验&#xff0c;有两种方法可行&#xff1a; 1. 修改server.xml中的<Host>标签 <Host name"localhost" appBase"../apps/haha" 红色字体部分修改为应用的路径&#xff0c;…

C++中的queue(容器适配器)

目录 一、成员函数 一、构造函数 二、入栈 push 三、出栈 pop 四、判空 empty 五、队列大小 size 六、取队头元素 front 七、取队尾元素 back 八、入栈 emplace 九、交换函数 swap 二、非成员函数重载 一、关系运算符重载 二、交换函数 swap C中的queue不再是容…

旅游陪同翻译难吗, 旅游翻译英译中哪家好?

近来&#xff0c;随着中国旅游业的蓬勃发展&#xff0c;旅游陪同翻译的需求也水涨船高&#xff0c;这些专业的翻译服务者为中外游客搭建起友谊的桥梁&#xff0c;引领他们共同探索中国这片古老而神秘的土地 。那么&#xff0c;旅游陪同翻译英译中难吗&#xff1f;我们如何在众多…

【Ansible】04

【Ansible】03 任务块 block任务块 使用 block 可以将多个任务合并为一个组可以将整个 block任务组 , 一起控制是否要执行 # 如果webservers组中的主机系统发行版是Rocky&#xff0c;则安装并启动nginx [rootpubserver ansible]# vim block1.yml --- - name: block tasksho…

Linux0.11 源码中的内存分页机制

学习Linux的源码&#xff0c;《深入linux 内核架构》这本书看起来就让人害怕&#xff0c;然后就想着看看早期的linux版本的源码&#xff0c;从网上查看资料发现linux0.11 这个版本有很多人拿来当成教学版本&#xff0c;而且也有很多的参考书以这个版本作为基础来讲解&#xff0…

docker-MySQL 8 主从搭建

一.目录结构&#xff1a; 我是在/home目录下&#xff0c;建立个sql文件夹&#xff1a; 二、配置文件 1.mysql配置 mysql-master下.conf文件配置 ###### [mysqld] server-id1 # 启用二进制日志 log-binmaster-bin # 指定需要复制的数据库 binlog-do-dbtest_db # 指定二进制日…