runtime.runloop

ios算法之冒泡排序算法

2021-02-05  本文已影响0人  90后的晨仔

百度百科解释
通过不断的走访需要排序的元素,依次比较两个相邻的元素。如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。这样重复的进行直到没有相邻元素需要交换,就算元素排序完成。名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名冒泡排序

oc Demo地址

#pragma mark - 冒泡排序
- (void)bubbleSortMethod{
    
    int iCount  = 0;//记录外层循环的次数
    int jCount  = 0;//记录内存循环交换的次数
     NSMutableArray *array = [NSMutableArray arrayWithArray:@[@10,@1,@2,@9,@7,@19,@5,@3,@8,@13,@17]];
    NSInteger arrCount = array.count - 1;
    for (int i = 0; i < arrCount; i++) {//外层for循环控制循环次数
           iCount++;
        for (int j = 0; j < arrCount - i; j++) { //内层for循环控制交换次数
            jCount++;
            if ([array[j] intValue] > [array[j + 1] intValue]) {
                [array exchangeObjectAtIndex:j withObjectAtIndex:j + 1];
            }
            [self showBubbleSortResult:array];
        }
    }
    NSLog(@"循环次数:%d",iCount);
    NSLog(@"共%d次比较",jCount);
}

//打印数组
- (void)showBubbleSortResult:(NSMutableArray * )array {
    NSString * str = @"";
    for (NSNumber * value in array) {
       str = [str stringByAppendingString:[NSString stringWithFormat:@"%zd ",[value integerValue]]];
    }
    NSLog(@"%@",str);
    NSLog(@"<=============>");
}

/// Mark - 冒泡算法
func bubbleSortMethod(_ nums: inout [Int]) {
    var iCount = 0;//记录外层循环的次数
    var jCount = 0;//记录内存循环交换的次数
    let n = nums.count
    for i in 0..<n {
        iCount += 1
        for j in 0..<(n - 1 - i) {
            jCount += 1
            if nums[j] > nums[j + 1] {
                nums.swapAt(j, j + 1)
                print(nums)
                print("============")
            }
        }
    }
    print("外层次数:\(iCount)","交换次数:\(jCount)")
}
 
var nums = [10,1,2,9,7,19,5,3,8,13,17]
bubbleSortMethod(&nums)

swift Demo地址

上一篇下一篇

猜你喜欢

热点阅读