python笔记2-冒泡排序

前言

面试的时候经常有面试官喜欢问如何进行冒泡排序?这个问题相信能难倒一批英雄好汉,本篇就详细讲解如何用python进行冒泡排序。

一、基本原理

1.概念:

冒泡排序(Bubble Sort),是一种计算机领域的较简单的排序算法。

它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。

2.算法原理:

冒泡排序算法的运作如下:(从后往前)

>比较相邻的元素。如果第一个比第二个大,就交换他们两个

>对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

>针对所有的元素重复以上的步骤,除了最后一个。

>持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

二、交换两个数

1.如果a = 10 , b = 20如何交换两个数呢?

2.实现两个数的交换原理其实很简单,设一个临时变量c就可以了:

>先把a的值传给c,此时c的值就是10了,a的值还是10

>然后把b的值传给a,此时a的值是20,b的值还是20

>最后把c的值传给b, 此时b的值是10

3.python里面交换两个数不用那么复杂,用这个方法就行了:

>a , b = b, a

三、遍历比较相邻的数

1.比如一个队列是:[1, 3, 10, 9, 21, 35, 4, 6]

2.可以做一次遍历,比较相邻的数,前面的数比后面的数大就交换,这样第一次遍历可以把最大的数下沉到最后一个位置

3.为了便于理解,交换过的地方用红色框框圈出来了

四、循环下沉

1.上面的遍历比较只做了一次下沉,把最大的数下沉到最后一个位置了,那接下来就需要把第二大的数,下沉到倒数第二个位置,

依次循环,一直到最小的数在最上面。

2.这里s是先计算li队列的长度,然后把range函数反转了,变成:[7, 6, 5, 4, 3, 2, 1, 0]

五、sort()排序

1.讲真,python里面排序不用这么麻烦,一个函数搞定:sort()

六、参考代码

# coding:utf-8
li = [1, 3, 10, 9, 21, 35, 4, 6]

s = range(len(li))[::-1]
print s

for i in s:
    for j in range(i):
        if li[j] > li[j + 1]:
            li[j], li[j + 1] = li[j + 1], li[j]

# 排序函数
# li.sort() 

print li

本文分享自微信公众号 - 从零开始学自动化测试(yoyoketang),作者:YOYO

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-03-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Cypress学习12-父子元素定位

    若要在元素中获取所有下一个同级DOM元素,直到另一个元素,请使用.next until()命令。

    上海-悠悠
  • python测试开发django-19.admin后台自定义显示

    django的admin后台默认显示的内容很少,只显示了表的相关信息,查看字段内容需点开详情才能查看,不是很直观。 在admin.py文件里面是可以自定义相关的...

    上海-悠悠
  • python测试开发django-17.admin后台管理

    通常一个网站开发,需要有个后台管理功能,比如用后台管理发布文章,添加用户之类的操作。django的admin后台管理主要可以实现以下功能

    上海-悠悠
  • Flask 实现远程日志实时监控

    在自动化运维系统中,常常需要监控日志,这些日志是不断更新的。本文提供了一种实时日志监控的 Python 实现。主要实现以下功能:

    岂不美哉Frost
  • Python|多进程的lock机制

    我们知道Python中多进程是相互执行互不干扰的,但是如果多进程之间需要对同一资源对象进行操作或者多个进程之间有相互依赖的,那就需要一个共享变量供多进程使用。P...

    用户1278550
  • 前端成神之路-WebAPIs02

    自定义属性目的:是为了保存并使用数据。有些数据可以保存到页面中而不用保存到数据库中。

    海仔
  • Spring Boot使用Log4j Implemented Over SLF4J生成日志并在控制台打印

    Spring Boot设置切面,执行方法的时候在控制台打印出来,并生成日志文件 引入依赖: <!--日志--> <dependency> ...

    二十三年蝉
  • 块元素, 内联元素, 内联块元素块元素(默认为父级宽度的100%,支持全部样式):内联元素(不支持宽高, 不支持margin上下, 不支持padding上下)内联块元素(从其它元素转换而来, disp

    块元素(默认为父级宽度的100%,支持全部样式): body h1 , h2, h3, h4, h5, h6 p div li (条目) ul(定义无序列表, ...

    zhaoolee
  • Vue.js-事件处理器 原

    方法事件处理器 许多事件处理的逻辑都很复杂,所以直接把JavaScript代码写在v-on指令中是不可行的,因此v-on可以接收一个定义的方法来调用

    tianyawhl
  • 结构体、共用体

    1 #include <stdio.h> 2 union 3 { 4 int i; 5 char x[2]; 6 }a; ...

    猿人谷

扫码关注云+社区

领取腾讯云代金券