给我希尔排序,堆排序,快速排序的python代码,要求每次可以比对随机生成的1万个数字,然后通过这三个排序算法的快慢告诉我哪个算法最好
时间: 2024-10-14 21:15:01 浏览: 19
python八个常用排序(插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序)
当然可以,这里我会提供希尔排序、堆排序和快速排序的基本Python实现,并演示如何比较它们在处理1万个随机数时的速度。请注意,这只是一个基础的性能评估,实际效果会受到很多因素影响,比如数据分布、硬件环境等。
```python
import random
import time
def shell_sort(arr):
gap = len(arr) // 2
while gap > 0:
for i in range(gap, len(arr)):
temp = arr[i]
j = i
while j >= gap and arr[j - gap] > temp:
arr[j] = arr[j - gap]
j -= gap
arr[j] = temp
gap //= 2
return arr
def heap_sort(arr):
n = len(arr)
def heapify(arr, n, i):
largest = i
left = 2 * i + 1
right = 2 * i + 2
if left < n and arr[left] > arr[largest]:
largest = left
if right < n and arr[right] > arr[largest]:
largest = right
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)
for i in range(n, -1, -1):
heapify(arr, n, i)
for i in range(n - 1, 0, -1):
arr[i], arr[0] = arr[0], arr[i]
heapify(arr, i, 0)
return arr
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
less = [x for x in arr if x < pivot]
equal = [x for x in arr if x == pivot]
greater = [x for x in arr if x > pivot]
return quicksort(less) + equal + quicksort(greater)
# 生成随机数
arr = [random.randint(0, 1000000) for _ in range(10000)]
start_time = time.time()
shell_sorted_arr = shell_sort(arr.copy())
print(f"Shell sort took {time.time() - start_time} seconds")
start_time = time.time()
heap_sorted_arr = heap_sort(arr.copy())
print(f"Heap sort took {time.time() - start_time} seconds")
start_time = time.time()
quicksorted_arr = quicksort(arr.copy())
print(f"Quick sort took {time.time() - start_time} seconds")
# 比较速度并总结结果
```
运行以上代码后,你可以观察到每个排序算法所需的时间。通常来说,快速排序在平均情况下的效率最高,而堆排序次之,希尔排序最慢(尤其是在初始差距较大的情况下)。然而,这个比较并不是绝对的,因为真实世界中的最佳取决于数据的具体分布。对于小规模数组,插入排序可能会更快。如果你想深入了解哪种排序更适合你的特定场景,可以尝试优化上述代码或者采用更专业的性能分析工具。
阅读全文