iOS(Object C) 冒泡排序

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

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趟就已经有序,则不需要再排下去(增加时间复杂度)

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

objectivec 复制代码
#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;
}
相关推荐
法的空间5 小时前
Flutter JsonToDart 支持 JsonSchema
android·flutter·ios
侃侃_天下5 小时前
最终的信号类
开发语言·c++·算法
echoarts6 小时前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
2501_915918416 小时前
iOS 上架全流程指南 iOS 应用发布步骤、App Store 上架流程、uni-app 打包上传 ipa 与审核实战经验分享
android·ios·小程序·uni-app·cocoa·iphone·webview
Aomnitrix6 小时前
知识管理新范式——cpolar+Wiki.js打造企业级分布式知识库
开发语言·javascript·分布式
每天回答3个问题7 小时前
UE5C++编译遇到MSB3073
开发语言·c++·ue5
伍哥的传说7 小时前
Vite Plugin PWA – 零配置构建现代渐进式Web应用
开发语言·前端·javascript·web app·pwa·service worker·workbox
小莞尔7 小时前
【51单片机】【protues仿真】基于51单片机的篮球计时计分器系统
c语言·stm32·单片机·嵌入式硬件·51单片机
小莞尔7 小时前
【51单片机】【protues仿真】 基于51单片机八路抢答器系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
00后程序员张7 小时前
iOS App 混淆与加固对比 源码混淆与ipa文件混淆的区别、iOS代码保护与应用安全场景最佳实践
android·安全·ios·小程序·uni-app·iphone·webview