码迷,mamicode.com
首页 > 编程语言 > 详细

python的冒泡排序

时间:2018-05-30 22:45:11      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:img   属性   通过   false   start   它的   提高   二层   list   

简介:

冒泡排序(Bubble sort):时间复杂度O(n^2)
交换排序的一种。其核心思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序记录为止。

  • 重复列表进行排序,比较每对相邻的项目,如果它 们的顺序错误,则交换它们
  • 在每次通过时,未排序的最大元素已被“冒泡 ”到阵列末端的合适位置
  • 重复列表直到不需要交换,这表明列表已被排序

技术分享图片

属性:

  • 属于稳定排序
  • O(1) :额外的空间  (best case:在列表本来就拍好序的情况)
  • O(n2 ) :比较和交换
  • 适应性::O(n) 接近排序时

技术分享图片

#算法时间复杂度为O(n*2)
‘‘‘
为体现冒牌排序细节的不同,
我写出简单的冒泡排序方法:bubble_sort_easy
和改进后的冒泡排序方法:bubble_sort_imp
‘‘‘

#简单的冒泡排序方法
#它的问题是当列表本来的顺序就是比较完好;仍会花费复杂的时间空间来排序

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)

 

python的冒泡排序

标签:img   属性   通过   false   start   它的   提高   二层   list   

原文地址:https://www.cnblogs.com/kumata/p/9113665.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!