冒泡排序

python学习网 2018-04-13 00:05:02

冒泡排序:

1. 标准冒泡
2. 布尔优化冒泡
3. 完整Dome及其对比
4. 特例情况

标准冒泡:

def bubble_sort_1(li):
    for i in range(len(li)-1):
        for j in range(len(li) - i - 1):
            if li[j] > li[j+1]:
                li[j], li[j+1] = li[j+1], li[j]
    return li

布尔优化冒泡
def bubble_sort_2(li):
    
    for i in range(len(li)-1):
        judge = False
        for j in range(len(li) - i - 1):
            if li[j] > li[j+1]:
                li[j], li[j+1] = li[j+1], li[j]
                judge = True
        if not judge:
            break
    return li

完整Dome及其对比

# _*_ coding:utf-8 _*_
import random
import time

__author__ = "aou1758"
__date__ = "2018/4/11 5:03"


# 先定义一个计算Demo运行时间的装饰器
def GetRunTime(func):
    def call_func(*args, **kwargs):
        begin_time = time.time()
        ret = func(*args, **kwargs)
        end_time = time.time()
        Run_time = end_time - begin_time
        print(str(func.__name__)+"函数运行时间为"+str(Run_time))
        return ret
    return call_func

@GetRunTime
def maopao1(data):
    for i in range(len(data)-1):
        for j in range(len(data)-i-1):
            if data[j] > data[j+1]:
                data[j], data[j+1] = data[j+1], data[j]
    return data


@GetRunTime
def maopao2(data):
    for i in range(len(data)-1):
        panduan = False
        for j in range(len(data)-i-1):
            if data[j] > data[j+1]:
                data[j], data[j+1] = data[j+1], data[j]
                panduan = True
        if not panduan:
            break
    return data


data = list(range(1000))
random.shuffle(data)
print("洗牌之后的列表:" + str(data))
print("冒泡1"+str(maopao1(data)))
print("冒泡2"+str(maopao2(data)))

冒泡排序优化后分三种情况

极好:
已经排好序
一般:
随机序列
极坏:
倒序
阅读(767) 评论(0)