冒泡排序之python

冒泡排序(Bubble sort)

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

1.算法描述:

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

2.算法属性:

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

3.代码实现

#算法时间复杂度为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)

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

时间: 2024-10-14 20:34:39

冒泡排序之python的相关文章

算法:冒泡排序(python版)

1.将n个元素从大到小排序后,选择第k个大的元素 #!/usr/bin/env python #coding -*- utf:8 -*- #冒泡排序选第k个元素 import random import time def select_k(): n = int(input("所要生成的数组的长度:")) arraya = [] for i in range(n): x = random.choice(range(100)) arraya.append(x) print("所生

数据结构-冒泡排序(Python&amp;java实现)

1. 冒泡算法的核心思想冒泡排序的核心思想就是扫描数据清单,找到乱序的两个相邻的数据进行两两比较并交换位置,然后继续扫描数据,接着反复重复上述的操作直至排序结束.2. 示例我们以23,15,58,-4,99,0这组无序的数字为例:例子为从小到大排序,初始状态:23,15,58, -4,99,0第一次排序结果:15,23,-4,58,0,99第二次排序结果:15,-4,23,0,58,99第三次排序结果:-4,15,0,23,58,99第四次排序结果:-4,0,15,23,58,99第五次排序结果

冒泡排序算法-python实现

1 ''' 2 冒泡排序算法及其优化 3 冒泡排序的基本特征是只能交换相邻的元素. 4 从下边界开始,一趟扫描下来,可以把当前最大值顶到上边界: 5 如果没有发生交换操作,则表示数组是有序的. 6 ''' 7 8 9 # 算法一:基本冒泡排序 10 def BubbleSort_1(arr): 11 # 外层循环累计排序轮数,同时控制待排序数组的上边界,即A[0..i]为待排序部分 12 # 内层循环扫描A[0..i-1],比较相邻元素,并通过交换元素值的方式将最大值顶到最上方 13 for i

冒泡排序(python实现)

思想:从第一个开始往后进行比较大小,如果大,互相交换位置,继续往后比较,如果小,进行下一个元素的比较(也是顺序的比较大小). def bubble_sort(sort_list): """冒泡排序""" n = len(sort_list) # 每个元素都需要在list中比较一遍,最差情况为O(n*n) for j in range(0, n-1): count = 0 # 当前元素在序列中进行排序 for i in range(0, n-1-j

冒泡排序(python版)

实现源码 def bubble(array): flag = len(array)-1 while flag >0: iter = 0 for i in range(flag): if array[i] > array[i+1]: array[i], array[i+1]= array[i+1],array[i] iter=i flag = iter array = [5,3,18,99,8,2,8] if __name__ == "__main__": bubble(ar

冒泡排序的python代码实现

li = [33, 2, 10, 1,564,880,8,99,51,3]# for i in range(len(li) - 1):#     current = li[i]#     next_value = li[i + 1]#     if li[i] > li[i + 1]:#         temp = li[i]#         li[i] = li[i + 1]#         li[i + 1] = temp# print(li)## for i in range(len

python随笔目录

线程池 python内置的全局变量 冒泡排序的python代码实现

每日一题 2019.10.10

# coding=utf-8"""请输入10个数,并安从小到大的顺序排序"""num = [] def getTenNum(): for i in range(10): x = int(input("please input the num:")) num.append(x) def sortNum(n): length = len(n) for x in range(length): for y in range(x, le

Python函数的冒泡排序、递归以及装饰器

函数的冒泡排序: 本质是,让元素换位置,逐个比较最终排序. 例1:实现a1,a2值互换: a1 = 123 a2 = 456 temp = a1 a1 = a2 a2 = temp print(a1) print(a2) 结果: 456 123 冒泡排序: #!/bin/bash/env python # -*- coding:utf-8 -*- li = [22,1,5,4,3,66,22,12,34,21] for j in range(1,len(li)): for i in range(