美文网首页
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