Python版冒泡排序算法
0 为什么写本文
一方面对经典排序算法冒泡排序进行复习,另一方面通过实际应用来检验python基础知识的掌握情况,包括range函数、len函数、for循环、if语句、函数定义与调用、列表的排序等知识点。在实践中加深理解,达到学以致用、用以促学、学用相长的目的。
1 什么是冒泡排序
冒泡排序的基本思想是,将需要排序的元素看作是一个个“气泡”,最小的“气泡”最快浮出水面,排在前面。较小的“气泡”排在第二个位置,依次类推。冒泡排序需要对数列循环若干次,例如数列中有i个元素。第一遍循环,自底向上检查一遍这个数列,比较相邻的两个元素。如果较小的元素在数列的下面,把较小的元素排在前面,依次比较之后,就把最大的元素置于底部了,第二遍循环就不需要比较最后一个元素了。依次类推,第n遍循环只需要从第一个元素开始,比较i-n次,经过i-1遍的处理后,数列就排序完成了。

在深入学习更多排序算法后和在实际使用情况中,冒泡排序的使用还是极少的。它适合数据规模很小的时候,而且它的效率也比较低,但是作为入门的排序算法,还是值得学习的。
2 代码实现
# 冒泡排序
def bubble_sort(numbers):
numbers_len = len(numbers)
# 可在此处加入列表是否为空的判断
for i in range(numbers_len-1, 0, -1):
for j in range(i):
if numbers[j] > numbers[j+1]:
numbers[j], numbers[j+1] = numbers[j+1], numbers[j]
print(numbers) def main():
numbers = [23, 12, 9, 15, 6]
bubble_sort(numbers) if __name__ == "__main__":
main() # 核心代码分析:
# 第3行:获取需排序列表的长度
# 第5行:每循环一次表示进行一趟排序,变量i为每趟需要比较的次数
# 第6行:循环比较相邻两个元素
# 第7行:判断相邻两个元素的大小
# 第8行:把数值较小的数排到前面
3 运行结果

4 内置排序函数


sort与sorted的详细用法计划另写一文。
Python版冒泡排序算法的更多相关文章
- 运用python实现冒泡排序算法
冒泡排序,一个经典的排序算法,因在算法运行中,极值会像水底的气泡一样逐渐冒出来,因此而得名. 冒泡排序的过程是比较两个相邻元素的大小,然后根据大小交换位置,这样从列表左端开始冒泡,最后最大值会依次从右 ...
- 基于python 实现冒泡排序算法
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/11/17 14:42 # @Author : gylhaut # @Site ...
- Python之冒泡排序算法
顾名思义,冒泡排序直观的意思是气泡越大冒的越快:),对应到我们的列表中就是数字最大的先选出来,然后依次进行.例如 myList = [1,4,5,0,6],比较方式为: 相邻的两个数字先进行比较,也就 ...
- 用python编写排序算法
交换排序 === 冒泡排序,快速排序 插入排序 ===直接插入排序,希尔排序 选择排序 === 简单选择排序,堆排序 归并排序 基数排序 冒泡排序 要点 冒泡排序是一种交换排序. 什么是交换排序呢? ...
- Python之排序算法:快速排序与冒泡排序
Python之排序算法:快速排序与冒泡排序 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/7828610.html 入坑(简称IT)这一行也有些年头了,但自老师 ...
- python实现排序算法 时间复杂度、稳定性分析 冒泡排序、选择排序、插入排序、希尔排序
说到排序算法,就不得不提时间复杂度和稳定性! 其实一直对稳定性不是很理解,今天研究python实现排序算法的时候突然有了新的体会,一定要记录下来 稳定性: 稳定性指的是 当排序碰到两个相等数的时候,他 ...
- 冒泡排序算法的 python 实现与 C 的比较
昨天用c写了简单的冒泡排序算法之后,正好最近在学 python,也想试试用python实现一下. 总体感觉,对于这种简答的小程序,python 确实充分体现了他简洁,易懂的特点.写起来特别流畅,舒服. ...
- 字符串匹配算法之 kmp算法 (python版)
字符串匹配算法之 kmp算法 (python版) 1.什么是KMP算法 KMP是三位大牛:D.E.Knuth.J.H.MorriT和V.R.Pratt同时发现的.其中第一位就是<计算机程序设计艺 ...
- python开发学习-day05(正则深入、冒泡排序算法、自定义模块、常用标准模块)
s12-20160130-day05 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...
随机推荐
- (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 通用的星星类已经完成了,下面我们来实现具体的变长和缩短道具. 变 ...
- Linux内核编译时会遇到的问题--缺少mkimage
由于各大平台所带的内核不同,所以编译方式也不同,但方法都是大同小异. 但是,编译内核有时候会提示缺少mkimage这个命令,如何解决? 供应商提供内核的同时也会提供其它的一些,比如Uboot,root ...
- Android样式(style)和主题(theme)资源介绍-android学习之旅(五十六)
样式(style)资源 代码示例 <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...
- 5个你不知道的HTML5的接口
原文地址:5 HTML5 APIs You Didn't Know Existed 原文日期: 2010年09月27日 翻译日期: 2013年8月7日 当人们看到或者说出"HTML5&quo ...
- 设计模式之——工厂模式(A)
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41085085 昨天看完了工厂模式,觉得在开发的过程中好多地 ...
- Java中四大代码块的执行顺序(附code)
验证证的方法是写code,如下: public class test { static class A { public static String name = "hello"; ...
- Linux信号实践(3) --信号内核表示
信号在内核中的表示 执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending).进程可以选择阻塞(Block)某个信号.被阻塞的信号产生时将保持在未 ...
- 【leetcode76】Intersection of Two Arrays II
题目描述: 给定两个数组求他们的公共部分,输出形式是数组,相同的元素累计计数 例如: nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2]. 原文描述: G ...
- E-JSON数据传输标准
简介 E-JSON的设计目标是使业务系统向浏览器端传递的JSON数据保持一致,容易被理解和处理,并兼顾传输的数据量.E-JSON依托于http协议(rfc2616)与JSON数据交换格式(rfc462 ...
- 开源网络监控管理系统:OpenNMS
OpenNMS是一个开源的企业级基于Java/XML的分布式网络和系统监控管理平台.OpenNMS是管理网络的绝好工具,它能够显示网络中各中终端和服务器的状态和配置,为方便地管理网络提供有效的信息. ...