zoukankan      html  css  js  c++  java
  • 冒泡排序之python

    冒泡排序(Bubble sort)

    两两比较相邻记录的关键字,如果反序则交换,直到没有反序记录为止。

    1.算法描述:

    • 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
    • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
    • 针对所有的元素重复以上的步骤,除了最后一个;
    • 重复步骤1~3,直到排序完成。

    2.算法属性:

    • 时间复杂度:O(n^2)
    • 空间复杂度:O(1)
    • 稳定性:稳定(下图Stable*表示是否稳定)
    • O(1) :额外的空间  (best case:在列表本来就拍好序的情况)
    • O(n2 ) :比较和交换
    • 适应性::O(n) 接近排序时
    • 交换排序的一种

    3.代码实现

    #算法时间复杂度为O(n^2)
    '''
    为体现冒泡排序细节的不同,
    我写出简单的冒泡排序方法:bubble_sort_easy
    和改进后的冒泡排序方法:bubble_sort_imp
    '''
    #kumata's code
    #简单的冒泡排序方法
    #它的问题是当列表本来的顺序就是比较完好;仍会花费复杂的时间空间来排序
    
    def bubble_sort_easy(nums: list):
        for i in range(len(nums)):
            # 嵌套的二层循环的index从0开始,所以后面要len(nums)-i-1
            for j in range(len(nums) - i - 1):
                if nums[j] > nums[j + 1]:
                    nums[j], nums[j + 1] = nums[j + 1], nums[j]   #交换
        return nums
    
    nums = [1,2,5,8,4,3,6]
    bubble_sort_easy(nums)
    
    输出结果
    [1, 2, 3, 4, 5, 6, 8]
    
    #改进的冒泡排序
    '''
    1.加入time计时runing时间
    2.加入flag判断列表是否已经不需要继续排序,提高效率
    '''
    def bubble_sort_imp(nums=list):
        import time
        start = time.time()  #开始时间  
        for i in range(len(nums)): # 当 n pass
            
            is_sorted = True  # 立个flag,当已经排好序的情况时引入Ture的is_sort
            
            for j in range(0, len(nums) - i - 1):
                if (nums[j + 1] < nums[j]):
                    nums[j], nums[j + 1] = nums[j + 1], nums[j]  #交换
                    
                    is_sorted = False    #立个False的flag
            
            if (is_sorted): break    #当不需用到嵌套二层for时退出,提高效率
                
        t = time.time() - start  #记下运行时间
        return nums,t
    
    nums = [1,2,5,8,4,3,6]
    bubble_sort_imp(nums)
    
    #运行结果
    ([1, 2, 3, 4, 5, 6, 8], 0.0)
  • 相关阅读:
    [HAOI2010]软件安装
    「HNOI2015」菜肴制作
    [ZJOI2007] 小Q的矩阵游戏 (模板—Dinic)
    「POI2012」约会 Rendezvous
    [APIO2016]划艇
    [CQOI2011]放棋子
    【SDOI2015】bzoj3990 排序
    [bzoj2242] [SDOI2011]计算器
    模板—BSGS
    【BZOJ1227】[SDOI2009]虔诚的墓主人
  • 原文地址:https://www.cnblogs.com/kumata/p/9114125.html
Copyright © 2011-2022 走看看