美文网首页
02数据结构排序算法之冒泡排序

02数据结构排序算法之冒泡排序

作者: 7分醉 | 来源:发表于2018-05-22 22:31 被阅读11次

    基本思想

    冒泡排序(Bubble Sort)一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。

    初级冒泡排序

    从数组中取出一个元素和数组中其他元素比较,如果反序则交换

    /**
     *  初级冒泡排序算法
     *
     *  @param dataArray 要排序的数据
     *
     *  @return 已排序的数据
     */
    + (NSArray *)bubbleSort:(NSArray *)dataArray {
        NSMutableArray *resultArray = [NSMutableArray arrayWithArray:dataArray];
        
        for (NSInteger i; i < resultArray.count; i ++) {
            for (NSInteger j = i + 1; j < resultArray.count; j ++) {
                if (resultArray[i] > resultArray[j]) {//如果 resultArray[i] > resultArray[j] 则交换位置
                    [resultArray exchangeObjectAtIndex:i withObjectAtIndex:j];
                }
            }
            NSLog(@"i=%ld array:%@",(long)i,resultArray);
        }
        
        return [resultArray copy];
    }
    

    中级冒泡排序

    从数组最后一个元素开始依次比较相邻的两个元素,如果反序则交换

    /**
     *  中级冒泡排序算法
     *
     *  @param dataArray 要排序的数据
     *
     *  @return 已排序的数据
     */
    + (NSArray *)bubbleSort_2:(NSArray *)dataArray {
        NSMutableArray *resultArray = [NSMutableArray arrayWithArray:dataArray];
        
        for (NSInteger i = 0; i < resultArray.count; i ++) {
            for (NSInteger j = resultArray.count - 1; j > i; j --) {
                if (resultArray[j] < resultArray[j - 1]) {
                    [resultArray exchangeObjectAtIndex:j withObjectAtIndex:j-1];
                }
            }
            NSLog(@"i=%ld array:%@",(long)i,resultArray);
        }
        
        return [resultArray copy];
    }
    

    高级冒泡排序

    设置一个标志,从数组最后一个元素开始依次比较相邻的两个元素,如果反序则交换,每次交换后更改标志,一次循环结束后,如果没有更改标志说明已经排序完成则停止循环

    /**
     *  高级冒泡排序算法
     *
     *  @param dataArray 要排序的数据
     *
     *  @return 已排序的数据
     */
    + (NSArray *)bubbleSort_3:(NSArray *)dataArray {
        NSMutableArray *resultArray = [NSMutableArray arrayWithArray:dataArray];
        
        BOOL changeFlag;
        for (NSInteger i = 0; i < resultArray.count; i ++) {
            changeFlag = NO;
            for (NSInteger j = resultArray.count - 1; j > i; j --) {
                if (resultArray[j] < resultArray[j - 1]) {
                    changeFlag = YES;
                    [resultArray exchangeObjectAtIndex:j withObjectAtIndex:j-1];
                }
            }
            NSLog(@"i=%ld array:%@",(long)i,resultArray);
            if (!changeFlag) {
                break;
            }
        }
        
        return [resultArray copy];
    }
    

    相关文章

      网友评论

          本文标题:02数据结构排序算法之冒泡排序

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