【Python】冒泡排序和快速排序

雖然說Python裏面提供了現成的排序方式,而且效率也非常高,但是該會的還是得會。這裏我也就不多說什麼了,代碼+註釋,自己看吧!

在這裏爲了B站視頻測試二者效率,所以增加了隨機數和時間的計算。

from time import time
from random import randint

# 全局變量,便於修改
gl_length = 100

# 定義空列表,存放排序數據
num_list = []

# 產生隨機數函數
def listRandom(num_list):
    i = 0
    while i < gl_length:
        # 隨機範圍0~999
        num_list.append(randint(0, 1000))
        i += 1


# 遍歷函數
def listForeach(num_list):
    print("=" * 80)
    # 爲了換行的美觀,沒有直接使用 for i in num_list
    for i in range(gl_length):
        print(num_list[i], end="\t")
        if ((i + 1) % 10) == 0:
            print("\n")


# 冒泡排序
def bubbleSort(num_list):
    star_time = time()
    for x in range(gl_length - 1):
        for y in range(gl_length - 1 - x):
            if num_list[y] >= num_list[y + 1]:
                num_list[y], num_list[y + 1] = num_list[y + 1], num_list[y]
    end_time = time()
    return end_time - star_time


def partition(num_list, low, high):
    i = (low - 1)
    pivot = num_list[high]
    for j in range(low, high):
        # 當前元素小於或等於 pivot
        if num_list[j] <= pivot:
            i = i + 1
            num_list[i], num_list[j] = num_list[j], num_list[i]
    num_list[i + 1], num_list[high] = num_list[high], num_list[i + 1]
    return (i + 1)


# 快速排序函數
def quickSort(num_list, low, high):
    star_time = time()
    if low < high:
        pi = partition(num_list, low, high)
        quickSort(num_list, low, pi - 1)
        quickSort(num_list, pi + 1, high)
    end_time = time()
    return end_time - star_time


listRandom(num_list)
listForeach(num_list)
use_time = quickSort(num_list, 0, gl_length - 1)
# use_time = bubbleSort(num_list)
listForeach(num_list)
print("USE TIME:"+ str(use_time))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章