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;
}
相关推荐
贝壳69017 分钟前
同一道三亿位选型题,三个AI给了我三个答案,我把它们拉进同一台机器复跑
算法
青少儿编程课堂3 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会图形化考级:校园大富翁经营闯关解析
c++·python·算法·bfs·信息学竞赛
another heaven3 小时前
【C/C++ 第一次跨越(上):用 C++11/14 停止制造新的旧代码】
c语言·c++·制造
在所不辞兄3 小时前
为什么在新能源汽车电驱与热管理开发中,AI驱动的数字孪生和数据驱动仿真正在部分替代对物理台架与实车标定的依赖?
人工智能·深度学习·神经网络·算法·机器学习
I_belong_to_jesus14 小时前
C++关于分支预测的优化1
开发语言·c++·算法
another heaven21 小时前
【C/C++ Ranges 是零开销抽象吗?拆开管道、惰性求值和编译期膨胀】
c语言·开发语言·c++
Code_Solitude21 小时前
C语言动态内存 + 柔性数组 + 数组名退化
c语言·算法·柔性数组
上海潭龙东海科技有限公司21 小时前
客运站管控之动态孪生技术方案(新增一屏管控模块
数据仓库·人工智能·算法·重构·动态规划
YLCHUP1 天前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论