iOS 冒泡排序,直接插入排序,希尔排序

1.前言:

作为一个IOS开发工程师,上班没事的时候试着自己写一下排序的,感觉应该很快写出来,结果还是在修修改改中调试更正过来。眼高手低的毛病得改,什么都得敲一下才能记得更牢固,还是记录一下吧。

2.冒泡排序

图片一
原理:
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

- (void)bubbleSort{ //冒泡排序
    for (int k = 0; k<self.sortArray.count; k++) {
        for (int i = 0; i<self.sortArray.count; i++) {
            NSString *fontItem = self.sortArray[i];
            if(i<self.sortArray.count-1){
                NSString *backItem = self.sortArray[i+1];
                if([fontItem integerValue] > [backItem integerValue]){
                    [self.sortArray replaceObjectAtIndex:i withObject:backItem];
                    [self.sortArray replaceObjectAtIndex:i+1 withObject:fontItem];
                }
            }
        }
    }
    NSLog(@"冒泡之后的排序为:%@",self.sortArray);
}

3插入排序

图片二
原理:
通过当前元素,与之前的所有元素进行对比,将当前元素插入到,已经确定的最小元素前面 ,重复操作之后直接排序结束

- (void)dirInsert{ //直接插入
    for (int i = 0; i<self.sortArray.count; i++) {
        NSString *fontItem = self.sortArray[i];
        if(i<self.sortArray.count-1){
            NSString *backItem = self.sortArray[i+1];
            if([fontItem integerValue] > [backItem integerValue]){
                for (int k =0 ; k<i; k++) {
                    NSString *searchInFont = self.sortArray[k];
                    if([backItem integerValue] <=[searchInFont integerValue]){
                        [self.sortArray removeObjectAtIndex:i+1];
                        [self.sortArray insertObject:backItem atIndex:k];
                        break;
                    }
                }
                
            }
        }
    }
    NSLog(@"直接插入之后的排序为:%@",self.sortArray);
}

4希尔排序

原理:
希尔排序法(缩小增量法) 属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序的方法。

- (void)shellSort{
    int gap = (int)self.sortArray.count / 2;
    while (gap >= 1) {
        for(int i = gap ; i < [self.sortArray count]; i++){
            NSInteger temp = [[self.sortArray objectAtIndex:i] intValue];
            int j = i;
            while (j >= gap && temp < [[self.sortArray objectAtIndex:(j - gap)] intValue]) {
                [self.sortArray replaceObjectAtIndex:j withObject:[self.sortArray objectAtIndex:j-gap]];
                j -= gap;
            }
            [self.sortArray replaceObjectAtIndex:j withObject:[NSNumber numberWithInteger:temp]];
        }
        gap = gap / 2;
    }
    NSLog(@"希尔排序为:%@",self.sortArray);


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值