python与冒泡排序

上一篇文章,介绍了一个非常快的排序算法--桶排序,但是它的缺点就是太耗资源了,这次要实现的算法就不用太耗资源了,它就是冒泡排序。



问题提出:

将以下数据升序排列:9, 2, 8, 6, 4



冒泡排序原理:

冒泡排序就是遍历数据,每次只与下一个数字比较,如果这两个数顺序不对,则与交换过来。

就上面那个问题来说,因为要升序排列,所以数字越大越排在后面。则两个数比较的时候,如果后一个数比当前数小,则顺序不对,要将这两个数交换。遍历的过程如下图:

第一次比较第一和第二个数字,9与2相比较,9比2大,顺序不对,则交换位置。

第二次比较第二与第三个数字,因为9换到了第二位,则9与8比较,9大,顺序不对,则交换位置。

以此类推,最后9就像泡泡一样升到了最后一位,我们称这样为一趟,这一趟里面有多次比较。

由于一趟只归为一个数,则如果有n个数字,则需要进行n-1趟。

因为归位后的数字不用再比较了,所以每趟只需要比较n-1-i次(i为已执行的趟数)。

由上可以得出冒泡排序的关键步骤是两个循环:

1 for(i = 0; i < n-1; i++){
2   for(j = 0; j < n-1-i; j++)
3     if(a[j] > a[j+1]){
4       temp = a[j];
5       a[j] = a[j+1];
6       a[j+1] = temp;
7     }
8 } 


python实现:

根据上述思路,用python实现也是把关键地方实现即可:

1 #假设变量已经全部定义好
2 for i in range(len-1):
3   for j in range(len-1-i):
4     if a[j] > a[j+1]:
5       a[j], a[j+1] = a[j+1], a[j]

以下是完整代码:(可以到github上下载https://github.com/DIGCreat/pythonAndAlgorithms.git)

 1 #!/usr/bin/env python
 2 # -*- coding:utf8 -*-
 3 ‘‘‘
 4 简介:本程序主要是用python实现冒泡排序,程序的功能是实现
 5      降序排列。
 6
 7 作者:King  日期:2016/08/01  版本1
 8 ‘‘‘
 9
10 class BubbleSort(object):
11     ‘‘‘
12     self.datas:       要排序的数据列表
13     self.datas_len:   数据急的长度
14     _sort():          排序函数
15     show():           输出结果函数
16
17     用法:
18     BubbleSort(datas) 实例化一个排序对象
19     BubbleSort(datas)._sort() 开始排序,由于排序直接操作
20                               self.datas, 所以排序结果也
21                               保存在self.datas中
22     BubbleSort(datas).show()  输出结果
23     ‘‘‘
24     def __init__(self, datas):
25         self.datas = datas
26         self.datas_len = len(datas)
27
28     def _sort(self):
29         #冒泡排序要排序n个数,由于每遍历一趟只排好一个数字,
30         #则需要遍历n-1趟,所以最外层循环是要循环n-1次,而
31         #每次趟遍历中需要比较每归位的数字,则要在n-1次比较
32         #中减去已排好的i位数字,则第二层循环要遍历是n-1-i次
33         for i in range(self.datas_len-1):
34             for j in range(self.datas_len-1-i):
35                 if(self.datas[j] < self.datas[j + 1]):
36                     self.datas[j], self.datas[j+1] = 37                             self.datas[j+1], self.datas[j]
38
39     def show(self):
40         print ‘Result is:‘,
41         for i in self.datas:
42             print i,
43         print ‘‘
44
45 if __name__ == ‘__main__‘:
46     try:
47         datas = raw_input(‘Please input some number:‘)
48         datas = datas.split()
49         datas = [int(datas[i]) for i in range(len(datas))]
50     except Exception:
51         pass
52
53     bls = BubbleSort(datas)
54     bls._sort()
55     bls.show()


总结:

冒泡排序因为是在原数组上直接操作,所以它占的空间资源较少,在数据量不大的情况还是挺好的。但是由于算法涉及双重循环,所以在数据量大的情况下,程序运行的时间是相当长的,因为要一次一次地遍历数据。



最后有兴趣的同学可以关注我的微信公众号,可以随时及时方便看我的文章。*^_^*

扫码关注或者搜索微信号:King_diary

时间: 2025-01-16 15:26:21

python与冒泡排序的相关文章

python的冒泡排序

1.python中跟其他编程语言一样,也有冒泡排序 所谓冒泡排序,就是把同一个列表中的数字,按照大小进行排序,相邻的两个值进行比较,把较大的值往后排,直到一个列表中的元素的顺序从左到右按照从小到大的顺序排列 下面用代码演示一遍 1 a = [87, 33, 99, 12, 56, 39, 66, 22] 2 3 for i in range(1,len(a)): #外层循环的长度按照a的长度为(1,8) 4 5 for j in range(len(a)-i): 6 #内层循环表示每次把相邻的数

用python实现冒泡排序

冒泡排序 基本思想 冒泡法也称沉底法,没相邻两个记录关键字比较大小,大的记录往下沉(也可以小的网上浮).每一遍把最后一个下沉的位置记下,下一遍只需检查比较到此位置:到所有记录都不发生变化时,整个过程结束(每交换一次,记录减少一个反序数). 举例 有一组数据( 83, 16, 9, 96, 27, 75, 42, 69,34 ),在开始时83与16互相比较,因为83>16,所以两个元素互换,然后比较83>9,83与9互换,接着比较83<96,所以不变,然后互换的元素有(96,27),(96

python实现冒泡排序的几种方法

什么是冒泡排序? 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. 这个算法的名字由来是因为越大的元素会经由交换慢慢"浮"到数列的顶端,故名冒泡排序. 以上是百度词条对冒泡排序的官方解释. 但是我要说一下我的个人理解,我觉得冒泡排序的核心思想是:每次比较两个数,如果他们顺序错误(大于或者小于),那么就把

利用Python进行冒泡排序

# -*- coding:utf-8 -*- ## 冒泡排序解析 """ 冒泡排序的必备知识: 互换位置 用temp临时变量 a1 = 456 a2 = 123 temp = a1 a1 = a2 a2 = temp print(a1) print(a2) Python中可以不使用中间变量temp.直接可以进行互换位置. a1 = 456 a2 = 123 if a1 > a2: # 如果a1 比 a2 大,那么 交换位置 (a1, a2) = (a2, a1) # 运

Python版冒泡排序算法

0 为什么写本文 一方面对经典排序算法冒泡排序进行复习,另一方面通过实际应用来检验python基础知识的掌握情况,包括range函数.len函数.for循环.if语句.函数定义与调用.列表的排序等知识点.在实践中加深理解,达到学以致用.用以促学.学用相长的目的. 1 什么是冒泡排序 冒泡排序的基本思想是,将需要排序的元素看作是一个个"气泡",最小的"气泡"最快浮出水面,排在前面.较小的"气泡"排在第二个位置,依次类推.冒泡排序需要对数列循环若干次

python复习冒泡排序

冒泡排序: 思路: 先找到最大值放到最右边: #encoding=utf-8 a=[1,9,2,8,3,6,4] print "a before change:",a for i in range(len(a)-1): if a[i] > a[i+1]: a[i],a[i+1] = a[i+1],a[i] print "a after change:",a 结果: D:\>python test.py a before change: [1, 9, 2,

Python排序-冒泡排序、选择排序、插入排序

''' 冒泡排序 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. 这个算法的名字由来是因为越大的元素会经由交换慢慢"浮"到数列的顶端 ''' data_set = [12,45,2,48,66,2,1,56,36,90,5,10,503] for i in range(len(data_set)): ##控制相邻比较的轮数 for j in range(len(data_set

python版冒泡排序

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

Python实现冒泡排序

#!/usr/bin/env python # -*- coding:utf-8 -*- l = [1, 8, 3, 5, 6, 2, 4, 7, 9, 0] for end in range(len(l))[::-1]:     flag = False # 标志判断是否有交换     for i in range(0,end):         if l[i] > l[i+1]:             temp = l[i]             l[i] = l[i+1]