高薪算法+计算机职称考试数据结构和算法分析

冒泡排序和快速排序

2019-04-24  本文已影响5人  程序员Darker

冒泡排序

import random, time

# 随机生成一个列表,里面有10000个数字
data = [random.randint(10, 10000) for i in range(10000)]

# 冒泡排序
def bubble(data):
    for i in range(len(data) - 1, 0, -1):
        for j in range(i):
            if data[j] > data[j + 1]:
                data[j], data[j + 1] = data[j + 1], data[j]

# 统计排序用了多久时间
start = time.time()
bubble(data)
end = time.time()
print(end - start)

耗时:7.338299751281738秒

快速排序

# 随机生成一个列表
data = [random.randint(10, 10000) for i in range(10000)]
# 快速排序方式一
def quick_sort(data):
    left, middle, right = [], [], []
    if len(data) > 1:
        pivot = data[0]
        for i in data:
            if i < pivot:
                left.append(i)
            elif i == pivot:
                middle.append(i)
            else:
                right.append(i)
        return quick_sort(left) + middle + quick_sort(right)
    else:
        return data


start = time.time()
quick_sort(data)
end = time.time()
print(end - start)

耗时:0.016863584518432617秒

# 随机生成一个列表
data = [random.randint(10, 10000) for i in range(10000)]
# 快速排序方式二
def quick2_sort(data: list, start: int, end: int):
    # 递归的退出条件
    if start >= end:
        return

    # 设定起始元素为要寻找位置的基准元素
    mid = data[start]

    # low为序列左边的由左向右移动的游标
    low = start

    # high为序列右边的由右向左移动的游标
    high = end

    while low < high:
        # 如果low与high未重合,high指向的元素不比基准元素小,则high向左移动
        while low < high and data[high] >= mid:
            high -= 1
        # 将high指向的元素放到low的位置上
        data[low] = data[high]

        # 如果low与high未重合,low指向的元素比基准元素小,则low向右移动
        while low < high and data[low] < mid:
            low += 1
        # 将low指向的元素放到high的位置上
        data[high] = data[low]

    # 退出循环后,low与high重合,此时所指位置为基准元素的正确位置
    # 将基准元素放到该位置
    data[low] = mid

    # 对基准元素左边的子序列进行快速排序
    quick2_sort(data, start, low - 1)

    # 对基准元素右边的子序列进行快速排序
    quick2_sort(data, low + 1, end)


start = time.time()
quick2_sort(data, 0, 10000 - 1)
end = time.time()
print(end - start)

耗时:0.01979970932006836秒

冒泡排序和快速排序的对比

同样的一组数据,快速排序所需要的时间比冒泡排序快的太多了

排序算法总结

排序算法总结.PNG
上一篇下一篇

猜你喜欢

热点阅读