个人学习笔记——冒泡排序Python版

冒泡排序的原理:

        冒泡排序是将待排序的数组相邻两元素两两比较,如果符合排序的预期则这两个元素的相对位置保持不变;如果不符合排序的预期则交换这两个相邻元素的顺序。题眼在相邻上。以这样的方式进行排序通过两两的交换可以将端元素“挤”到最边上,就像泡泡浮出水面,因而起名为冒泡排序。

以如下所示数组为例:

[65, 12, 21, 3, 9, 1, 50, 33]

按照冒泡排序的思想,对于该数组进行排序的执行过程为(设排序结果为从小到大):

  • 比较65与12的值,与预期逆序,则交换两元素的位置
  • 顺延比较65与21的值,与预期逆序,交换二者的位置
  • ...
  • 65这个元素最终会像泡泡一样被浮到最右端,此时第0趟结束
  • 周而复始进行这一过程,直至生成有序数组

Python代码实现:

import sys
lists = [65, 12, 21, 3, 9, 1, 50, 33]
#starting bubble sort
count = len(lists)
print count
for i in range(0, count-1):
    for j in range(1, count-i):
        if lists[j] < lists[j-1]:
            lists[j-1], lists[j] = lists[j], lists[j-1]
print lists

CR:

  1. range()函数的取值是左闭右开区间,需注意右边界的取值
  2. i运行全局是count-1(i的含义为周而复始的趟数,即count-1趟,范围为[0,count-2]),因为最后仅会剩下一个元素,数组已然有序,即使两两相比也不会交换任何元素的顺序。因而不再需要第count-1趟。

运行结果:


时间复杂度:O(N^2)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值