Python蛮力法归治法减治法

用python怎么写随机产生30000个整数,用蛮力法进行选择排序和冒泡排序,用归治法进行归并排序和快速排序,用减治法进行插入排序和堆排序;输出递增结果;统计每一种排序运行所花费的时间。

python代码有错误求帮忙改一下!

以下是Python代码实现:

import random
import time

生成随机数列

lst = [random.randint(1, 100000) for _ in range(30000)]

蛮力法选择排序

def selection_sort(lst):
n = len(lst)
for i in range(n-1):
min_idx = i
for j in range(i+1, n):
if lst[j] < lst[min_idx]:
min_idx = j
lst[i], lst[min_idx] = lst[min_idx], lst[i]
return lst

start_time = time.time()
sorted_lst = selection_sort(lst)
end_time = time.time()
print("选择排序所用时间:", end_time - start_time)

蛮力法冒泡排序

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

start_time = time.time()
sorted_lst = bubble_sort(lst)
end_time = time.time()
print("冒泡排序所用时间:", end_time - start_time)

归治法归并排序

def merge_sort(lst):
if len(lst) <= 1:
return lst
mid = len(lst) // 2
left_lst = merge_sort(lst[:mid])
right_lst = merge_sort(lst[mid:])
return merge(left_lst, right_lst)

def merge(left_lst, right_lst):
result = []
i = j = 0
while i < len(left_lst) and j < len(right_lst):
if left_lst[i] <= right_lst[j]:
result.append(left_lst[i])
i += 1
else:
result.append(right_lst[j])
j += 1
result += left_lst[i:]
result += right_lst[j:]
return result

start_time = time.time()
sorted_lst = merge_sort(lst)
end_time = time.time()
print("归并排序所用时间:", end_time - start_time)

归治法快速排序

def quick_sort(lst):
if len(lst) <= 1:
return lst
pivot = lst[0]
left_lst = [x for x in lst[1:] if x < pivot]
right_lst = [x for x in lst[1:] if x >= pivot]
return quick_sort(left_lst) + [pivot] + quick_sort(right_lst)

start_time = time.time()
sorted_lst = quick_sort(lst)
end_time = time.time()
print("快速排序所用时间:", end_time - start_time)

减治法插入排序

def insertion_sort(lst):
n = len(lst)
for i in range(1, n):
key = lst[i]
j = i - 1
while j >= 0 and lst[j] > key:
lst[j+1] = lst[j]
j -= 1
lst[j+1] = key
return lst

start_time = time.time()
sorted_lst = insertion_sort(lst)
end_time = time.time()
print("插入排序所用时间:", end_time - start_time)

减治法堆排序

def heap_sort(lst):
def sift_down(start, end):
root = start
while True:
child = 2 * root + 1
if child > end:
break
if child + 1 <= end and lst[child] < lst[child+1]:
child += 1
if lst[root] < lst[child]:
lst[root], lst[child] = lst[child], lst[root]
root = child
else:
break

n = len(lst)
for i in range(n//2-1, -1, -1):
    sift_down(i, n-1)
for i in range(n-1, 0, -1):
    lst[0], lst[i] = lst[i], lst[0]
    sift_down(0, i-1)
return lst

start_time = time.time()
sorted_lst = heap_sort(lst)
end_time = time.time()
print("堆排序所用时间:", end_time - start_time)

其中,random.randint(1, 100000) 用于生成1到100000之间的随机整数。每个排序算法的实现方法已在代码中给出,并使用 time 模块统计了每种排序算法的运行时间。

结果插入排序和堆排序爆错

代码缩进都完全没有,建议你格式化一下代码,方法是按工具条上的</>

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^