码迷,mamicode.com
首页 > 编程语言 > 详细

算法篇-常见算法

时间:2018-12-08 22:29:39      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:思路   pre   com   元素   特殊   最大值   str   交换   第一个   

一、冒泡排序

1、思路:首先,列表每两个相邻得数比较大小,如果前边得比后边得大,那么这两个数就互换位置。就像是水中冒泡一样

2、代码关键点

  趟数:n-1趟

  无序区: n - 1 - i 【剩余的元素个数】

技术分享图片技术分享图片技术分享图片

详解:

n 为列表中元素的个数

首先假设第一个数5(索引为0的数为最大的会先浮出水面)

然后与相邻数(索引比它大的)比较,这里5<7,所以更正假设,这时候认为7会先浮出水面,

然后重复上面的过程,一直到找到最大值9,浮到最上面。

然后计算机再从索引0开始,直到索引(n-1)-1【最大的已经浮出水面了,故无序区范围为n-2】。

n个元素的列表一共需要从索引0开始循环n-1次(每次选出剩余气泡中最大的,最后一个不需要再比较)。

每次循环需要比较的次数是n-1-i(i为大循环次数)===》外循环了几次就表示从无序区拿了几个数,剩下的元素个数还要减去自己,就是剩下要比较的次数了

无序区范围为:n-i -2    因为每次都到无序区倒数第二数,本次循环就比较完了

注:因range取值是前包后不包,为能取到倒数第二个值,所以是n-i-1

有一特殊情况:

就是一次循环下来发现一次交换也没有,说明剩下的气泡已经按顺序排列了,就不需要再循环了。

代码实现:

def bubble_sort(li):
    for i in range(len(li) - 1):  # 表示冒泡排序循环的次数
        exchange = False
        for j in range(len(li) - i - 1):  # j为元素索引,表示无序区索引的范围
            if li[j] > li[j + 1]:
                li[j], li[j + 1] = li[j + 1], li[j]
                exchange = True
        if not exchange:
            return
    return li

 

算法篇-常见算法

标签:思路   pre   com   元素   特殊   最大值   str   交换   第一个   

原文地址:https://www.cnblogs.com/sunxiuwen/p/10088969.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!