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

基本思想

冒泡排序(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数据结构排序算法之冒泡排序)