利用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) # 运用到多变量赋值,用元组分隔。
print(a1, a2)

# 冒泡排序原理

1       1       1       33

10     10       33      1
    》       》       》
2      33       10      10

33      2       2       2

上面是4个数。通过依次的从下面两个数开始比较,再与上面比较,得出最大的值,将最大的值放在最上面的位置,这就是冒泡。
33和2 先排序。利用的就是上面的那个基础知识。那么2在下面,33在上面。然后33和10再进行比较。最大的放上面,最小的放下面。。。。。
最后找到了33是最大值。该值为最大。放到了最上面。通过一系列的比较。33是最大的放在上面了。

然后再次操作步骤和上面一样,再进行最下面两个比较,依次比较。将最大的第二个数放到最上面。
33      33

1       10
    》
10      1

2       2

这次将最大的第二位数10找到了。
继续比较。。。
33      33

10      10
    》
1       2

2       1

这就是最终的结果,这就是应用的冒泡排序原理进行排序。

-------------

li = [33, 2, 10, 1]
使用冒泡排序,将列表从小到大排序;

下面用代码实现:
"""

li = [33, 2, 10, 1]  # 这是一个列表。长度为len(li)
print(li)

for i in range(len(li) - 1):
    #                           i = 0    1    2     3
    # current_value: li[i]          33   2    10    1
    # next_value:    li[i + 1]      2    10   1     无值了,导致数组越界。因此range(len(li) - 1)
    # print(i, li[i], li[i+1])
    if li[i] > li[i + 1]:
        temp = li[i]
        li[i] = li[i + 1]
        li[i + 1] = temp
print(li)  # 这次将最大的值33 取出了 放到了最后。
# 33最大的取出来了,li = [2, 10, 1, 33] ;现在还有再进行排序。将前三个值进行分别冒泡排序。那么就是 for i in range(len(li) - 2)

for i in range(len(li) - 2):
    if li[i] > li[i + 1]:
        temp = li[i]
        li[i] = li[i + 1]
        li[i + 1] = temp
print(li)  # 这次将第二大的的值33 取出了倒数第二位。
# 10第二大的取出来了, li = [2, 1, 10, 33], ;现在还有再进行排序。将前两个值进行分别冒泡排序。那么就是 for i in range(len(li) - 3)

for i in range(len(li) - 2):
    if li[i] > li[i + 1]:
        temp = li[i]
        li[i] = li[i + 1]
        li[i + 1] = temp
print(li)
# 这里就结束了,因为只有最后两个数 1 和 2 进行比较了。

# 总结上面的代码过程。唯一的区别在于for i in range(len(li) - 【1、2、3】) 这里的不同。那么就可以再在外面做个循环。
# li 的长度为len(li);上面len(li)个数排序进行了 -1 -2 -3 三次的过程。那么外层循环可以用 for j in range(1, len(li)) 即可。

冒泡排序最终表达式

li = [22, 31, 82, 35, 333, 2, 62, 78, 24, 6, 23, 4, 8, 88, 5, 42, 21, 233, 1232, 165, 121, 2480, 82, 12, ]

for j in range(1, len(li)):
    for i in range(len(li) - j):
        if li[i] > li[i + 1]:
            temp = li[i]
            li[i] = li[i + 1]
            li[i + 1] = temp
print(li)

或者

for j in range(1, len(li)):
    for i in range(len(li) - j):
        if li[i] > li[i + 1]:
            (li[i], li[i + 1]) = (li[i + 1], li[i])  # Python可以不使用中间变量temp,直接可以互换位置。
print(li)

原文地址:https://www.cnblogs.com/a72hongjie/p/8988716.html

时间: 2024-10-10 13:34:43

利用Python进行冒泡排序的相关文章

利用python实现冒泡排序

1.先生存一个随机数组成的list 2.然后进行排序,把大的元素放在后面,小的元素放在前面,最终实现从小到大排列 首先生存一个随机数组成的list import random # print(sys.path) # print(__file__) l1 = [] for i in range(6): i = random.randrange(0,165535) l1.append(i) print(l1) [72764, 163851, 54255, 51053, 106289, 48579]

几种排序算法的学习,利用Python和C实现

之前学过的都忘了,也没好好做过总结,现在总结一下. 时间复杂度和空间复杂度的概念: 1.空间复杂度:是程序运行所以需要的额外消耗存储空间,一般的递归算法就要有o(n)的空间复杂度了,简单说就是递归集算时通常是反复调用同一个方法,递归n次,就需要n个空间. 2.时间复杂度:一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多.一个算法中的语句执行次数称为语句频度或时间频度.记为T(n).一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)

利用python进行数据分析--(阅读笔记一)

以此记录阅读和学习<利用Python进行数据分析>这本书中的觉得重要的点! 第一章:准备工作 1.一组新闻文章可以被处理为一张词频表,这张词频表可以用于情感分析. 2.大多数软件是由两部分代码组成:少量需要占用大部分执行时间的代码,以及大量不经常执行的“粘合剂代码”. cython已经成为python领域中创建编译型扩展以及对接c/c++代码的一大途径. 3.在那些要求延迟性非常小的应用程序中(例如高频交易系统),为了尽最大可能地优化性能,耗费时间使用诸如C++这样更低级.更低生产率的语言进行

利用 Python yield 创建协程将异步编程同步化

在 Lua 和 Python 等脚本语言中,经常提到一个概念: 协程.也经常会有同学对协程的概念及其作用比较疑惑,本文今天就来探讨下协程的前世今生. 首先回答一个大家最关心的问题:协程的好处是什么? 通俗易懂的回答: 让原来要使用 异步 + 回调 方式写的非人类代码,可以用看似同步的方式写出来. 1.回顾同步与异步编程 同步编程即线性化编程,代码按照既定顺序执行,上一条语句执行完才会执行下一条,否则就一直等在那里. 但是许多实际操作都是CPU 密集型任务和 IO 密集型任务,比如网络请求,此时不

利用Python实现归并排序

利用python进行归并排序,摘抄自http://blog.csdn.net/minxihou/article/details/51821052 "代码真的不是一气呵成的,而且也不是想当然写出来的.可能需要反复断点中断来查看是否有逻辑错误.在理解了问题的基础下我们需要先把大体的代码框架最好先写出来,特别是主要的逻辑判断语句.但是不需要太care我循环体或者判断里面语句怎么实现,当你把这一步做到的时候能避免很多不必要的错误发生." 1 import random 2 3 def Conf

利用Python脚本管理Windows服务

Windows服务常用的功能就是启动服务,关闭服务,重启服务和查询服务运行状态,其中查询服务运行状态是其他三种操作的基础. 本文中提到的使用Python脚本管理Windows服务实际上是调用win32serviceutil模块,此模块来自pywin32包,此模块本身有管理服务的功能,有兴趣的可以去阅读它的部分源码. 本脚本存在的目的是为了熟练Python的语法和基本操作,Windows下有更好的命令行工具来管理服务,如sc.Powershell等.通常命令行工具的执行速度要比services.m

《利用python进行数据分析》

今天开始码这本书--<利用python进行数据分析>.R和python都得会用才行,这是码这本书的原因.首先按照书上说的进行安装,google下载了epd_free-7.3-1-win-x86.msi,译者建议按照作者的版本安装.

利用Python编写网络爬虫下载文章

#coding: utf-8 #title..href... str0='blabla<a title="<论电影的七个元素>——关于我对电影的一些看法以及<后会无期>的一些消息" target="_blank" href="http://blog.sina.com.cn/s/blog_4701280b0102eo83.html"><论电影的七个元素>——关于我对电…</a>' impo

利用python实现二分法

利用python实现二分法:我的实现思路如下 1.判断要查找的值是否大于最大值,如果大于则直接返回False 2.判断要查找的值是否小于最小值,如果小于则直接返回False 3.如果要查找的值在最大值和最小值之间,则进入循环 a.首先序列的长度要大于1,然后获取序列中间一个值的大小 b.然后和要查找的值做比较,如果相等,则直接返回True,如果不相等,则判断如果中间的值大于要查找的值,则说明要查找的值在该中间值的左边,如果中间的值小于要查找的值,则说明要查找的值在中间的值的右边 c.最后如果序列