iOS(Object C) 插入排序

插入排序的思想:

可以想象你在打牌,手里有一张牌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互换位置;

代码为:

objectivec 复制代码
- (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;
}

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

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

代码如下:

objectivec 复制代码
- (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;
}
相关推荐
故事和你913 小时前
sdut-程序设计基础Ⅰ-实验五一维数组(8-13)
开发语言·数据结构·c++·算法·蓝桥杯·图论·类和对象
像污秽一样3 小时前
算法与设计与分析-习题4.2
算法·排序算法·深度优先·dfs·bfs
芯联智造4 小时前
【stm32简单外设篇】- WS2812单线地址式 RGB 灯带
c语言·stm32·单片机·嵌入式硬件
Storynone4 小时前
【Day20】LeetCode:39. 组合总和,40. 组合总和II,131. 分割回文串
python·算法·leetcode
明明如月学长5 小时前
AI 更新太快学不过来?我用OpenClaw打造专属AI学习工作流
算法
黎阳之光5 小时前
【黎阳之光:以无线专网与视频孪生,赋能智慧广电与数字中国】
算法·安全·智慧城市·数字孪生
刀法如飞6 小时前
Agentic AI时代,程序员必备的算法思想指南
人工智能·算法·agent
刀法如飞6 小时前
Agentic AI时代程序员必备算法思想详解(附实战案例)
算法·ai编程·编程开发·agentic
飞Link7 小时前
告别盲目找Bug:深度解析 TSTD 异常检测中的预测模型(Python 实战版)
开发语言·python·算法·bug
djarmy7 小时前
ubuntu20.04搭建openharmony6.0的master分支。构建编译环境报错解决记录
c语言·ubuntu