• 舞动算法:冒泡排序


    冒泡排序原理

    首先,第一个数和第二个数比较,若第一个比第二个大,则交换位置,然后比较第二个和第三个,重复往后比较;

    然后,经过第一轮比较后最大的元素排到了最后;

    最后,剩下的元素重复上述步骤即可

    冒泡排序特点

    1.稳定性:我们从代码中可以看出只有前一个元素大于后一个元素才可能交换位置,所以相同元素的相对顺序不可能改变,所以它是稳定排序

    2.比较性:因为排序时元素之间需要比较,所以是比较排序 。

    3.时间复杂度:因为它需要双层循环n*(n-1)),所以平均时间复杂度为O(n^2)

    4.空间复杂度:只需要常数个辅助单元,所以空间复杂度为O(1),我们把空间复杂度为O(1)的排序成为原地排序(in-place)

    不明白?跳个舞吧【https://www.bilibili.com/video/BV1Px411L7Lu

    def bubble_sort(arr, n):
        """
        :param arr: 需要排序的数组
        :param n: 这个数组的长度
        """
        # 从第一个数开始依次和它后面的数进行大小比较
        for i in range(0, n):
            # 下一个数是否在数组范围内,是则进行大小判断
            if i + 1 < n and arr[i] > arr[i + 1]:
                arr[i], arr[i + 1] = arr[i + 1], arr[i]
    
            bubble_sort(arr, n - 1)
    
        return arr
    
    
    def bubble_sort2(arr):
        # 第一层for表示循环的遍数
        for i in range(len(arr) - 1):
            # 第二层for表示具体比较哪两个元素,每经历一轮排序需要比较的元素 -i
            for j in range(len(arr) - 1 - i):
                if arr[j] > arr[j + 1]:
                    # 如果前面的大于后面的,则交换这两个元素的位置
                    arr[j], arr[j + 1] = arr[j + 1], arr[j]
        return arr
    
    
    def bubble_sort3(arr, n):
    
        for j in range(0, n):
            for i in range(0, n):
                # 下一个数是否在数组范围内,是则进行大小判断
                if i + 1 < n and arr[i] > arr[i + 1]:
                    arr[i], arr[i + 1] = arr[i + 1], arr[i]
    
            # bubble_sort3(arr, n - 1)
    
        return arr
  • 相关阅读:
    【算法】哈希表法四部曲
    【算法】位运算技巧
    【算法】分治法四步走
    【算法】分支界限三步走
    【Java】位操作符
    【Java】String字符串格式化
    阿里一面,给了几条SQL,问需要执行几次树搜索操作?
    c++随机数问题研究
    Google单元测试框架gtest之官方sample笔记4--事件监控之内存泄漏测试
    Google单元测试框架gtest之官方sample笔记3--值参数化测试
  • 原文地址:https://www.cnblogs.com/dc2019/p/13619084.html
Copyright © 2020-2023  润新知