雖然說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))