算法---插入排序(直接插入排序)

插入排序:其基本操作就是将一个数据插入到已经拍好序的有序数据中,从而得到一个新的、个数加一 的有序数据,算法适用于少量数据的排序。
包括:直接插入排序,二分插入排序(又称折半插入排序),链表插入排序,希尔排序(又称缩小增量排序)。属于稳定排序的一种(通俗地讲,就是两个相等的数不会交换位置)

/*
直接插入排序
基本思想:
1,插入算法把要排序的数组分成两个部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即带插入元素)。在第一部分排序完成后,再将这个最后元素插入到已经拍好序的第一部分中。
2,每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
 */
NSMutableArray *array = [NSMutableArray arrayWithObjects:@12, @23, @3, @5, @43, nil];
    for (NSInteger i = 1; i < array.count; i++) {
        NSInteger  temp = [array[i] integerValue];
        NSInteger j = i - 1;
        //与已排序的数逐一比较
        while ((j >= 0) && ([array[j] integerValue] > temp)) {
            array[j + 1] = array[j];
            j--;
        }
        //存在大于temp的数,插入数组最前端
        if (j != (i-1)) {
            array[j + 1] = [NSNumber numberWithInteger:temp];
        }
        NSLog(@"%d--%@", i, array);
    }

控制台打印:
1–(12, 23, 3, 5, 43)
2–(3, 12, 23, 5, 43)
3–(3, 5, 12, 23, 43)
4–(3, 5, 12, 23, 43)

第二种方法:

NSMutableArray *array = [NSMutableArray arrayWithObjects:@12, @23, @3, @5, @43, nil];
    for (int i = 1; i < array.count; i++) {
        for (int j = i; j > 0; j--) {
            if ([array[j] integerValue] < [array[j - 1] integerValue]) {
                NSInteger temp = [array[j] integerValue];
                array[j] = array[j - 1];
                array[j - 1] = [NSNumber numberWithInteger:temp];
            }
        }
        NSLog(@"%d--%@", i, array);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值