实现快速排序算法,基准元素随机选取。要排序的整型数组元素可以用随机数生成器生成,运行程序,记录分别对十万,一百万,一千万,五千万个数据排序所用的时间,列出表格显示统计出来的时间。并单独显示一个100个数据的排序结果。
时间: 2024-03-23 09:39:41 浏览: 56
好的,这是一个关于算法的问题,我会尽力回答。下面是快速排序算法的示例代码:
```python
import random
import time
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = random.choice(arr) # 随机选择基准元素
left = []
right = []
equal = []
for element in arr:
if element < pivot:
left.append(element)
elif element > pivot:
right.append(element)
else:
equal.append(element)
return quick_sort(left) + equal + quick_sort(right)
# 生成随机整数数组
def generate_random_arr(n):
arr = []
for i in range(n):
arr.append(random.randint(1, 100))
return arr
# 统计排序时间并返回排序结果
def sort_and_time(arr):
start_time = time.time()
sorted_arr = quick_sort(arr)
end_time = time.time()
duration = end_time - start_time
return sorted_arr, duration
# 测试排序时间
def test_sort_time():
n_list = [100000, 1000000, 10000000, 50000000]
print("n\ttime")
for n in n_list:
arr = generate_random_arr(n)
sorted_arr, duration = sort_and_time(arr)
print("%d\t%.5f" % (n, duration))
# 输出前100个排序结果
def print_first_100(arr):
print("First 100 sorted elements:")
for i in range(100):
print(arr[i], end=" ")
print()
# 测试
arr = generate_random_arr(100)
sorted_arr, duration = sort_and_time(arr)
print_first_100(sorted_arr)
test_sort_time()
```
这个示例代码中,我们使用 `random.choice` 函数来随机选择基准元素,然后将数组分为三部分:小于基准元素的部分、等于基准元素的部分和大于基准元素的部分。我们递归地对左边和右边的部分进行排序,最后将它们和等于基准元素的部分合并起来。
对于测试排序时间,我们分别生成了四个不同大小的随机整数数组,并记录了排序所用的时间。对于输出前100个排序结果,我们只需要输出排序后数组的前100个元素即可。
希望这个示例代码对您有所帮助!
阅读全文