zoukankan      html  css  js  c++  java
  • python笔记--冒泡排序升级版

    前言
    面试的时候经常有面试官喜欢问如何进行冒泡排序?这个问题相信能难倒一批英雄好汉,本篇就详细讲解如何用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
    转载自:上海--悠悠

  • 相关阅读:
    codechef Taxi Driver
    BZOJ2190 SDOI2008 仪仗队
    BZOJ 1070: [SCOI2007]修车
    BZOJ 1066 [SCOI2007]蜥蜴
    最大流模板
    表达式计算
    codechef Polo the Penguin and the Tree
    LCA 求 树中两个点的距离
    Baby Step Giant Step model
    POJ 1330 Nearest Common Ancestors (LCA,dfs+ST在线算法)
  • 原文地址:https://www.cnblogs.com/king8/p/10722319.html
Copyright © 2011-2022 走看看