美文网首页
冒泡排序

冒泡排序

作者: 炒河粉儿 | 来源:发表于2021-09-13 09:31 被阅读0次

    冒泡排序的核心思路

    • 整个冒泡排序过程中包含多次冒泡操作。每一次冒泡操作都会遍历整个数组,依次对数组中相邻的元素进行比较,看是否满足大小关系要求,如果不满足,就将它们互换位置。一次冒泡操作会让至少一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作。

    冒泡排序的操作流程。

    • 假设要对一个数组a[6]从小到大顺序进行排序。第一步操作,先比较a[0]和a[1]的大小,如果a[0]>a[1],则将a[0]和a[1]交换位置,如果a[0]<a[1],则不交换位置。完成这一步操作后,再对a[1]和a[2]进行比较,操作原则同上。一直比较到最后,则a[5]就是这个数组中的最大值,已经在数组的末尾了。
    • 第二步操作再次进行a[0]和a[1]的比较,一直比较到a[4],就把数组的第二大的元素放在了a[4]的位置了。
    • 按照这样的原则,依次重复操作,比较到只剩a[0]的时候,就排好序了。

    冒泡排序的相关

    • 冒泡排序是原地排序算法,是稳定排序算法。
    • 冒泡排序的平均时间复杂度为O(n²)
    • 我们可以利用一个BOOL值去记录某次冒泡操作是否进行了数据的交换,如果没有进行数据操作,则说明数组以达到完全有序的状态,不需要继续执行后续冒泡操作了,直接结束排序就可以了。

    简单的代码实现

    - (void)bubbleSort
    {
        
        NSMutableArray *numberArray = [NSMutableArray arrayWithArray:@[@5,@1,@6,@2,@4,@3]];
        
        NSLog(@"排序之前的结果:%@",numberArray);
        
        for (int i = 0; i<numberArray.count; i++) {
            
            BOOL isNeedBreak = YES;
            
            for (int j = 0; j<(numberArray.count-i-1); j++) {
                if ([numberArray[j] intValue] > [numberArray[j+1] intValue]) {
                    NSNumber *numberTmp = numberArray[j];
                    numberArray[j] = numberArray[j+1];
                    numberArray[j+1] = numberTmp;
                    isNeedBreak = NO;
                }
            }
            
            if (isNeedBreak == YES) {
                break;
            }
        }
        
        NSLog(@"排序之后的结果:%@",numberArray);
    }
    
    

    c

    相关文章

      网友评论

          本文标题:冒泡排序

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