python_冒泡算法

什么是冒泡算法?

  -- 像鱼吐泡泡一样,每次都是向上冒出一个水泡

如何逻辑整理?

  -- 先拿第一个值和剩下的值,一一比较,必能找到最大的或者最小的

  -- 比较过程中,第一个值小于剩下的某个值,交换位置,依次比较到最后,最大的一个肯定在最前面,找最大

  -- 比较过程中,第一个值大于剩下的某个值,交换位置,依次比较到最后,最小的一个肯定在最前面,找最小

 

  -- 每次找出最大的值或者最小的值,比较循环就减少一次,当只剩下一个元素时候,就结束了

  从第几个值来看,按第几个值比较,忽略列表本身的索引值

# !/usr/bin/python3


def buble(fish):
    '''冒泡算法'''
    for j in range(1, len(fish)):               # 从第一个开始根后面的比较
        for i in range(len(fish)-j):            # 每遍历找到最大或最小的放在第一位,然后再次循环剩下的元素
            if fish[i] > fish[i+1]:             # 如果第i个元素大i+1,互换位置,相当于找到最小的放最前面
                # temp = fish[i+1]
                # fish[i+1] = fish[i]
                # fish[i] = temp
                fish[i], fish[i+1] = fish[i+1], fish[i]     # 位置互换
    return fish

if __name__ == '__main__':
    fish = [600, 4, 55, 42, 11, 5, 33, 6, 8, 20, 10, 66, 99, 77, 22]
    result = buble(fish)
    print(result)

  利用列表本身的索引值进行比较,不更好更容易理解么?

# !/usr/bin/python3


def buble(fish):
    '''冒泡算法'''
    for j in range(len(fish)):  # 从列表0索引开始,最后的元素就是一个,到最后一个元素,列表已经排好,无需自己比较自己
        for i in range(j + 1, len(fish)):  # j位置都是已经排好了,从j+1开始比较
            if fish[j] < fish[i]:  # 大于比较,交互位置,取最小的在前面
                # temp = list_1[i+1]
                # list_1[i+1] = list_1[i]
                # list_1[i] = temp
                fish[j], fish[i] = fish[i], fish[j]  # 交互位置,相当于以上三句话
    return fish

if __name__ == '__main__':
    fish = [600, 4, 55, 42, 11, 5, 33, 6, 8, 20, 10, 66, 99, 77, 22]
    result = buble(fish)
    print(result)

  记住一句话,比最大,交互位置,取最小的值,比最小,交互位置,取最大值

  大于的时候,交互位置,实际上是把小的值,推到了列表最前面,

  小于的时候,把大的值,推到最前面,这个才是冒泡算法最让人困惑的地方

posted @ 2017-04-09 18:48  梦_鱼  阅读(378)  评论(0编辑  收藏  举报