Python版冒泡排序算法

0 为什么写本文

一方面对经典排序算法冒泡排序进行复习,另一方面通过实际应用来检验python基础知识的掌握情况,包括range函数、len函数、for循环、if语句、函数定义与调用、列表的排序等知识点。在实践中加深理解,达到学以致用、用以促学、学用相长的目的。

1 什么是冒泡排序

冒泡排序的基本思想是,将需要排序的元素看作是一个个“气泡”,最小的“气泡”最快浮出水面,排在前面。较小的“气泡”排在第二个位置,依次类推。冒泡排序需要对数列循环若干次,例如数列中有i个元素。第一遍循环,自底向上检查一遍这个数列,比较相邻的两个元素。如果较小的元素在数列的下面,把较小的元素排在前面,依次比较之后,就把最大的元素置于底部了,第二遍循环就不需要比较最后一个元素了。依次类推,第n遍循环只需要从第一个元素开始,比较i-n次,经过i-1遍的处理后,数列就排序完成了。

在深入学习更多排序算法后和在实际使用情况中,冒泡排序的使用还是极少的。它适合数据规模很小的时候,而且它的效率也比较低,但是作为入门的排序算法,还是值得学习的。

2 代码实现

 1 # 冒泡排序
 2 def bubble_sort(numbers):
 3     numbers_len = len(numbers)
 4     # 可在此处加入列表是否为空的判断
 5     for i in range(numbers_len-1, 0, -1):
 6         for j in range(i):
 7             if numbers[j] > numbers[j+1]:
 8                 numbers[j], numbers[j+1] = numbers[j+1], numbers[j]
 9             print(numbers)
10
11 def main():
12     numbers = [23, 12, 9, 15, 6]
13     bubble_sort(numbers)
14
15 if __name__ == "__main__":
16     main()
17
18 # 核心代码分析:
19 # 第3行:获取需排序列表的长度
20 # 第5行:每循环一次表示进行一趟排序,变量i为每趟需要比较的次数
21 # 第6行:循环比较相邻两个元素
22 # 第7行:判断相邻两个元素的大小
23 # 第8行:把数值较小的数排到前面

3 运行结果

4 内置排序函数


sort与sorted的详细用法计划另写一文。

原文地址:https://www.cnblogs.com/zhanglin-0/p/8997821.html

时间: 2024-11-05 22:32:36

Python版冒泡排序算法的相关文章

python版冒泡排序

从第一个元素开始,对数组中两两相邻的元素比较,将值较小的元素放在前面,值较大的元素放在后面,一轮比较完毕,一个最大的数沉底成为数组中的最后一个元素,一些较小的数如同气泡一样上浮一个位置.n个数,经过n-1轮比较后完成排序. 假定有下标为0-n的n+1个数的序列,要求按升序排列,实现的步骤如下: (1)从第0个元素开始与后一个比较,如果比后大两元素交换,依次比较到第n个元素,最终将最大的数换入第n个元素中,a(n)不动 (2)重复(1) ,依次比较到第n-1个元素,最终将最大的数换入第n-1个元素

python 版DES和MAC算法

最近工作中需要用到python中的DES算法,虽然有现成的库,但总感觉用着不方便.于是把之前用的C和Java写的DES和MAC算法移植到python中.测试了下没问题. 这样以后就方便了,.在python中终于可以用DES算法了.之前把C写的DES算法封装成动态库,然后由python的ctypes调用,虽然可以但是不是很方便. 附:python版DES算法源码,还未封装成类,仍在完善中.源码CSDN资源中可下载.直接编译执行没问题. #!/usr/bin/env python # -*- cod

[转] Twitter的分布式自增ID算法Snowflake实现分析及其Java、Php和Python版

转载自:http://www.dengchuanhua.com/132.html 在分布式系统中,需要生成全局UID的场合还是比较多的,twitter的snowflake解决了这种需求,实现也还是很简单的,除去配置信息,核心代码就是毫秒级时间41位+机器ID 10位+毫秒内序列12位. 该项目地址为:https://github.com/twitter/snowflake是用Scala实现的. python版详见开源项目https://github.com/erans/pysnowflake.

Java版双向冒泡排序算法

冒泡排序算法是一种较为简单的并且稳定的排序算法,该算法的时间复杂度最好为O(n),最差时为O(n^2),需要的空间复杂度为O(1). 这里的算法稳定性是指 经过排序后,各元素仍然能保持它们在排序之前的相对次序,就称该算法是稳定的,反之,则为不稳定的. 例如,一组数排序前是a1,a2,a3,a4,a5,其中a2=a4,经过某种排序后a1,a2,a4,a3,a5,则说明这种排序是稳定的,因为a2排序前后都在a4前面:若排序的结果是a1,a4,a2,a3,a5,则该排序就不是稳定的了.------摘自

python版的快速排序算法源码

下面的代码段是关于python版的快速排序算法的代码,应该对各位朋友有用途. def qsort(L): return ((qsort([x for x in L[1:] if x < L[0]]) + L[0:1] + qsort([x for x in L[1:] if x >= L[0]]) ) if L else []) 版本2 def qsort3(arr, l, r): def swap(arr, s, d): if s != d: tmp = arr[s] arr[s] = ar

Python—冒泡排序算法

冒泡排序 一,介绍 冒泡排序(Bubble Sort)也是一种简单直观的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端. 作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉.冒泡排序还有一种优化算法,就是立一个 flag,当在一趟

冒泡排序算法-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常见排序算法解析

概述 十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序. 基础定义 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面. 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面. 时间复杂度:对排序数据的总的操作次数.

冒泡排序算法的JavaScript实现

作为经典的排序算法之一,冒泡排序在JavaScript中也有多种实现方式. 在一些最常见的实现中会声明临时变量,在另一些不必声明临时变量的实现中则可能只支持数值数组或字符串数组(二者之一). 下面介绍两种[无须声明临时变量],[对数值数组和字符串数组都适用]的实现方式. ES5版: var arr = [5, 25, 2, 53, 22, 10]; function bubbleSort(arr) { for (var j = 1, len = arr.length; j < len; j++)