冒泡排序算法的工作原理如下:

1.  比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。

2.  对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

3.  除了最后一个,所有的元素重复以上的步骤。

4.  持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

例子图步骤如下:

冒泡排序代码实现:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = "hsz" def bubble_sort(alist):
# 外层循环控制比较几轮
n = len(alist)
for j in range(n - 1):
# 内存循环控制交换
# -j是不再换已经排好的
for i in range(n - 1 - j):
# 若前一个比后一个大,则换
if alist[i] > alist[i + 1]:
alist[i], alist[i + 1] = alist[i + 1], alist[i]
# print(li) if __name__ == '__main__':
li = [33, 11, 26, 78, 3, 9, 40]
print("原来的列表:", li)
bubble_sort(li)
print("排序后的列表:", li)

调优后的冒泡算法实现:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = "hsz" # 调优后的冒泡排序 def bubble_sort(alist):
# 外层循环控制比较几轮
n = len(alist)
for j in range(n - 1):
# 定义计数器
count = 0
# 内存循环控制交换
# -j是不再换已经排好的
for i in range(n - 1 - j):
# 若前一个比后一个大,则换
if alist[i] > alist[i + 1]:
alist[i], alist[i + 1] = alist[i + 1], alist[i]
# 计数器
count += 1
if count == 0:
return if __name__ == '__main__':
li = [33, 11, 26, 78, 3, 9, 40]
print("原来的列表:", li)
bubble_sort(li)
print("排序后的列表:", li)

排序算法之冒泡排序的python实现的更多相关文章

  1. Java常见排序算法之冒泡排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  2. java排序算法之冒泡排序(Bubble Sort)

    java排序算法之冒泡排序(Bubble Sort) 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数 ...

  3. [ 转载 ] js十大排序算法:冒泡排序

    js十大排序算法:冒泡排序  http://www.cnblogs.com/beli/p/6297741.html

  4. 排序算法之冒泡排序Java实现

    排序算法之冒泡排序 舞蹈演示排序: 冒泡排序: http://t.cn/hrf58M 希尔排序:http://t.cn/hrosvb  选择排序:http://t.cn/hros6e  插入排序:ht ...

  5. 经典排序算法总结与实现 ---python

    原文:http://wuchong.me/blog/2014/02/09/algorithm-sort-summary/ 经典排序算法在面试中占有很大的比重,也是基础,为了未雨绸缪,在寒假里整理并用P ...

  6. 经典排序算法的总结及其Python实现

    经典排序算法总结: 结论: 排序算法无绝对优劣之分. 不稳定的排序算法有:选择排序.希尔排序.快速排序.堆排序(口诀:“快速.选择.希尔.堆”).其他排序算法均为稳定的排序算法. 第一趟排序后就能确定 ...

  7. java:高速排序算法与冒泡排序算法

     Java:高速排序算法与冒泡算法 首先看下,冒泡排序算法与高速排序算法的效率: 例如以下的是main方法: /**   *  * @Description:  * @author:cuiyaon ...

  8. 排序算法——(2)Python实现十大常用排序算法

    上期为大家讲解了排序算法常见的几个概念: 相关性:排序时是否需要比较元素 稳定性:相同元素排序后是否可能打乱 时间空间复杂度:随着元素增加时间和空间随之变化的函数 如果有遗忘的同学可以看排序算法——( ...

  9. 排序算法之冒泡排序的思想以及Java实现

    1 基本思想 设排序表长为n,从后向前或者从前向后两两比较相邻元素的值,如果两者的相对次序不对(A[i-1] > A[i]),则交换它们,其结果是将最小的元素交换到待排序序列的第一个位置,我们称 ...

随机推荐

  1. 利用Python数据分析基础

    一.Numpy的ndarray:一种多维数组 ndarray是一个通用的同构多维数据容器,其所有元素必须是相同的类型.每个数组都有一个shape(一个表示各维度的元组)和dtype(一个用于说明数据数 ...

  2. HTML的网页基本结构

    写在前面 <!DOCTYPE html><html lang="en"><head>            <meta charset=& ...

  3. AtCoder Beginner Contest 144

    https://atcoder.jp/contests/abc144/tasks/abc144_c #include<bits/stdc++.h> using namespace std; ...

  4. fdssd

    #include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #in ...

  5. 传奇装备锻造升级UPGRADEITEMEX功能详解

    装备升级功能可以指定升级物品及属性,按指定机率得到结果.需要升级的装备物品必须放在身上.命令格式UPGRADEITEMEX 物品位置(0-12) 属性位置(0-14) 成功机率(0-100) 点数机率 ...

  6. jmeter的使用---录制脚本

    1.设置fidder 2.在fidder中导出请求,选择jmx格式

  7. (matlab)自定义图像(matlab)

    clc;clear all;A=[0 230 255 60 30 100];A=uint8(A);imshow(A,'InitialMagnification','fit') 如图: clc;clea ...

  8. AcWing 867. 分解质因数

    #include <iostream> #include <algorithm> using namespace std; void divide(int x) { ; i & ...

  9. 路飞-后台Django项目创建

    后台:Django项目创建 环境 """ 为luffy项目创建一个虚拟环境 >: mkvirtualenv luffy """ &qu ...

  10. 吴裕雄 python 机器学习——局部线性嵌入LLE降维模型

    # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from sklearn import datas ...