美文网首页
OC版-冒泡排序,选择排序

OC版-冒泡排序,选择排序

作者: 木槿WEIXIAO | 来源:发表于2021-09-23 16:28 被阅读0次

1.冒泡排序

  • A.比较相邻的两个元素,如果前一个比后一个大,那就交换两个元素的位置
  • B.所以需要两个for循环进行排序比较
//冒泡排序
- (void)bubbleSortWithArray:(NSMutableArray *)array
{
    for (int end = (int)array.count; end > 0; end --) {
        
        for (int i = 1; i < end; i ++) {
            NSNumber *a = array[i];
            NSNumber *b = array[i - 1];
            if ([a integerValue] < [b integerValue]) {
                array[i] = b;
                array[i - 1] = a;
            }
        }
    }
}
//冒泡排序优化1
//如果某次循环完成之后,发现并没有走交换的代码,说明已经是排序好的了,直接break
- (void)bubbleSortTwoWithArray:(NSMutableArray *)array
{
    for (int end = (int)array.count; end > 0; end --) {
        BOOL sortComplete = YES;
        for (int i = 1; i < end; i ++) {
            NSNumber *a = array[i];
            NSNumber *b = array[i - 1];
            if ([a integerValue] < [b integerValue]) {
                array[i] = b;
                array[i - 1] = a;
                sortComplete = NO;
            }
        }
        if (sortComplete) {
            break;
        }
    }
}
//冒泡排序优化2
//记录最后一次交换的位置,并赋值给end,下次循环到end位置截止
- (void)bubbleSortThreeWithArray:(NSMutableArray *)array
{
    for (int end = (int)array.count; end > 0; end --) {

        int recordLast = 1;
        for (int i = 1; i < end; i ++) {
            NSNumber *a = array[i];
            NSNumber *b = array[i - 1];
            if ([a integerValue] < [b integerValue]) {
                array[i] = b;
                array[i - 1] = a;
                recordLast = i + 1;
            }
        }

        end = recordLast;
    }
}

2.选择排序

  • A.每次循环找到数组中最大的元素,交换最大元素与最后一个元素的值
  • B.所以需要两个for循环进行比较
//选择排序
- (void)selectSortWithArray:(NSMutableArray *)array
{
    for (int end = (int)array.count; end > 0; end --) {
        NSInteger maxIndex = 0;
        for (int i = 0; i < end; i ++) {
            NSInteger maxV = [array[maxIndex] integerValue];
            NSInteger iV = [array[i] integerValue];
            if (iV > maxV) {
                maxIndex = i;
            }
        }
        
        NSNumber *maxN = array[maxIndex];
        array[maxIndex] = array[end - 1];
        array[end - 1] = maxN;
    }
}

3.堆排序

  • A.堆排序的效率更高,本文不进行代码演示,后期会补上

相关文章

网友评论

      本文标题:OC版-冒泡排序,选择排序

      本文链接:https://www.haomeiwen.com/subject/odjogltx.html