ios算法之冒泡排序算法

这篇博客详细介绍了冒泡排序的原理和实现过程,包括Objective-C与Swift两种语言的代码示例。通过外层和内层循环,不断比较并交换元素,实现数组的升序排列。文中还提供了具体的循环次数和比较次数的统计,便于理解算法效率。
摘要由CSDN通过智能技术生成

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

  • oc版本如下

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(@"<=============>");
}
  • swift版本如下

/// 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地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值