冒泡排序(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)

冒泡排序之python的更多相关文章

  1. 算法:冒泡排序(python版)

    1.将n个元素从大到小排序后,选择第k个大的元素 #!/usr/bin/env python #coding -*- utf:8 -*- #冒泡排序选第k个元素 import random impor ...

  2. 排序算法之冒泡排序的python实现

    冒泡排序算法的工作原理如下: 1.  比较相邻的元素.如果第一个比第二个大(升序),就交换他们两个. 2.  对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大 ...

  3. 冒泡排序(Python实现)

    目录 1. while版本--冒泡排序 2. for版本--冒泡排序 3. 测试用例 4. 算法时间复杂度分析 1. while版本--冒泡排序 def bubble_sort_while(a_lis ...

  4. 冒泡排序算法-python

    冒泡排序:每两个相互比较,总是选出大的相互交换,直至最后选出该列表中最大的数字 def bubbleSort(myList): for i in range(len(myList)-1):#一共进行几 ...

  5. 冒泡排序(python版)

    实现源码 def bubble(array): flag = len(array)- : iter = for i in range(flag): ]: array[i], array[i+]= ar ...

  6. 冒泡排序的python代码实现

    li = [33, 2, 10, 1,564,880,8,99,51,3]# for i in range(len(li) - 1):#     current = li[i]#     next_v ...

  7. 冒泡排序算法-Python实现

    #-*- coding: UTF-8 -*- import numpy as np def BubbleSort(a): for i in xrange(0, a.size): for j in xr ...

  8. Python学习进阶

    阅读目录 一.python基础 二.python高级 三.python网络 四.python算法与数据结构 一.python基础 人生苦短,我用Python(1) 工欲善其事,必先利其器(2) pyt ...

  9. python排序之二冒泡排序法

    python排序之二冒泡排序法 如果你理解之前的插入排序法那冒泡排序法就很容易理解,冒泡排序是两个两个以向后位移的方式比较大小在互换的过程好了不多了先上代码吧如下: 首先还是一个无序列表lis,老规矩 ...

随机推荐

  1. 8 -- 深入使用Spring -- 8...1 Spring提供的DAO支持

    8.8.1 Spring提供的DAO支持. DAO模式是一种标准的Java EE设计模式,DAO模式的核心思想是,所有的数据库访问都通过DAO组件完成,DAO组件封装了数据库的增.删.查.改等原子操作 ...

  2. Jquery/js submit()无法提交问题

    有朋友可能会直接利用js或jquery来提交数据而不是使用表单直接提交了,小编来给大家介绍小编碰到的一个问题就是 submit()无法提交,下面我们来看解决办法与原因分析. jquery无法提交  代 ...

  3. MongoDB管理

    前几篇文章都是从开发和使用的角度了解了MongoDB的各个知识点,这篇文章将从MongoDB管理的角度入手,了解MongoDB管理所要了解的基本知识. 数据库命令 在前面几篇文章中,已经接触了一些数据 ...

  4. 把mongodb服务添加到系统服务中,报错:[sc] openscmanager 失败 5

    添加mongodb系统服务命令如下: sc create MongoDB binPath= "D:\MongoDB\bin\mongod.exe --service --dbpath D:\ ...

  5. iOS - 直播总结(理论到实践)

    一.直播原理及流程 1.一个完整直播app原理 直播原理:把主播录制的视频,推送到服务器,在由服务器分发给观众观看. 直播环节:推流端(采集.美颜处理.编码.推流).服务端处理(转码.录制.截图.鉴黄 ...

  6. (原创)使用mceusb设备,将lirc移植到android笔记

    首先说一下大环境和总体步骤: 下载lirc 0.8.7源码,使用ubuntu的setup.sh,配置为mceusb的驱动,同时Compile tools for X-Windows选项去掉,生成con ...

  7. SQL Server 索引结构及其使用(一)[转]

    SQL Server 索引结构及其使用(一) 作者:freedk 一.深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(cluster ...

  8. linux计划任务之crontab

    语法:        crontab [ -u user ] file        crontab [ -u user ] [ -i ] { -e | -l | -r } 说明: crontab命令 ...

  9. 云计算设计模式(二十一)——Sharding分片模式

    云计算设计模式(二十一)——Sharding分片模式 将一个数据存储到一组水平分区或碎片.存储和访问大量数据时,这个模式可以提高可扩展性. 背景和问题 由一个单一的服务器托管的数据存储区可能会受到以下 ...

  10. SharpGL学习笔记(八) 矩阵堆栈和变换的综合例子: 机器人

    我们先引入关于"矩阵堆栈"的官方说法: OpenGL的矩阵堆栈指的就是内存中专门用来存放矩阵数据的某块特殊区域.实际上,在创建.装入.相乘模型变换和投影变换矩阵时,都已用到堆栈操作 ...