zoukankan      html  css  js  c++  java
  • 舞动算法:冒泡排序

    冒泡排序原理

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

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

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

    冒泡排序特点

    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
  • 相关阅读:
    光脚丫学LINQ(025):如何验证DBML和外部映射文件
    使用LINQ to SQL将数据从一个数据库复制到另一个数据库
    用VS2010 C#写DLL文件并且调用(原创)
    linux初识
    Run Only One Copy Of Application
    SQL Server 2008开启远程连接
    用Visual C#做DLL文件
    SQL Server代理服务无法启动的处理方法(转载)
    QTP连接Oracle
    What's AJAX?
  • 原文地址:https://www.cnblogs.com/dc2019/p/13619084.html
Copyright © 2011-2022 走看看