import random
def random_nums_generator(max_value=1000, total_nums=20):
"""
随机数列表生成器
一些常用函数:
random随机数生成
random.random()用于生成一个0到1之间的随机数:0 <= n < 1.0;
random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。min(a,b) <= n <= max(a,b);
random.randint(a, b), 用于生成一个指定范围内的整数,其中a是下限,b是上限: a<= n <= b;
random.randrange(start, stop, step), 从指定范围内,按指定基数递增的集合获取一个随机数;
random.choice(sequence), 从序列中获取一个随机元素;
random.shuffle(x), 用于将一个列表中的元素打乱;
random.sample(sequence, k), 从指定序列中随机获取指定长度的片断;
"""
num_list = []
for i in range(total_nums):
num_list.append(random.randint(0, max_value))
return num_list
def bubble_sort(arr):
"""
冒泡排序,思想为比较相邻两个数,使较大(arr[j] > arr[j+1])或者较小(arr[j] < arr[j+1])的数一直往后推。
时间复杂度O(n^2),空间复杂度O(1)
"""
L = len(arr)
for i in range(L):
for j in range(L)[:-i - 1]:
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
def insert_sort(arr):
"""
插入排序,思想为将数插入到适合他大小的位置中。
时间复杂度O(n^2),空间复杂度O(1)
"""
L = len(arr)
ans = []
for i in range(L):
for j in range(i + 1):
if arr[i] < arr[j]:
ans.insert(j, arr[i])
break
else:
ans.append(arr[i])
break
return ans
def select_sort(arr):
"""
选择排序,思想为选出最大或最小的数放在首位
时间复杂度O(n^2),空间复杂度O(1)
"""
L = len(arr)
ans = []
for i in range(L):
min_num = arr[i]
for j in range(i, L):
if arr[j] < min_num:
min_num = arr[j]
ans.append(min_num)
return ans
def merge_sort(arr):
"""
归并排序,思想为利用递归将多个子表合并为一个有序表
时间复杂度O(nlogn),空间复杂度O(1)
"""
L = len(arr)
if L <= 1:
return arr
middle = L // 2
arr_left = merge_sort(arr[:middle])
arr_right = merge_sort(arr[middle:len(arr)])
new_arr = []
while len(arr_left) and len(arr_right):
if arr_right[0] < arr_left[0]:
new_arr.append(arr_right.pop(0))
else:
new_arr.append(arr_left.pop(0))
new_arr += arr_left
new_arr += arr_right
return new_arr
def quick_sort(arr):
"""
快速排序:思想为找一个基准,将小的放在前面,大的放在后面。
时间复杂度:O(nlogn),空间复杂度:O(nlogn)
"""
L = len(arr)
if L <= 1:
return arr
arr_left = []
arr_right = []
base = arr[0]
for i in range(1, L):
if arr[i] <= base:
arr_left.append(arr[i])
else:
arr_right.append(arr[i])
return quick_sort(arr_left) + [base] + quick_sort(arr_right)
numarr = random_nums_generator(100, 20)
print(numarr)
print('bubble_sort:', bubble_sort(numarr))
print('insert_sort:', insert_sort(numarr))
print('select_sort:', select_sort(numarr))
print('merge_sort:', merge_sort(numarr))
print('quick_sort:', quick_sort(numarr))
直接上代码了,都挺容易懂得,最好能自己实现一下印象更深刻些。运行结果如下
[57, 61, 94, 82, 81, 11, 22, 73, 75, 50, 81, 54, 92, 73, 95, 15, 50, 35, 6, 45]
bubble_sort: [6, 11, 15, 22, 35, 45, 50, 50, 54, 57, 61, 73, 73, 75, 81, 81, 82, 92, 94, 95]
insert_sort: [6, 11, 15, 22, 35, 45, 50, 50, 54, 57, 61, 73, 73, 75, 81, 81, 82, 92, 94, 95]
select_sort: [6, 11, 15, 22, 35, 45, 50, 50, 54, 57, 61, 73, 73, 75, 81, 81, 82, 92, 94, 95]
merge_sort: [6, 11, 15, 22, 35, 45, 50, 50, 54, 57, 61, 73, 73, 75, 81, 81, 82, 92, 94, 95]
quick_sort: [6, 11, 15, 22, 35, 45, 50, 50, 54, 57, 61, 73, 73, 75, 81, 81, 82, 92, 94, 95]