A数组中存储500个2000以内的随机整数,完成以下操作: (1)对A数组中的元素进行直接插入排序,显示排序所用时间; (2)对A数组中的元素进行希尔排序,显示排序所用时间; (3)对A数组中的元素进行起泡排序,显示排序所用时间; (4)对A数组中的元素进行快速排序,显示排序所用时间。
时间: 2023-06-23 22:09:49 浏览: 88
好的,这是一个排序算法问题,以下是对应的代码实现:
```python
import random
import time
# 直接插入排序
def insert_sort(arr):
n = len(arr)
for i in range(1, n):
j = i - 1
tmp = arr[i]
while j >= 0 and tmp < arr[j]:
arr[j+1] = arr[j]
j -= 1
arr[j+1] = tmp
# 希尔排序
def shell_sort(arr):
n = len(arr)
gap = n // 2
while gap > 0:
for i in range(gap, n):
j = i
tmp = arr[j]
while j >= gap and tmp < arr[j-gap]:
arr[j] = arr[j-gap]
j -= gap
arr[j] = tmp
gap //= 2
# 冒泡排序
def bubble_sort(arr):
n = len(arr)
for i in range(n-1):
for j in range(n-1-i):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
# 快速排序
def quick_sort(arr, left, right):
if left >= right:
return
pivot = arr[left]
i, j = left, right
while i < j:
while i < j and arr[j] >= pivot:
j -= 1
arr[i] = arr[j]
while i < j and arr[i] <= pivot:
i += 1
arr[j] = arr[i]
arr[i] = pivot
quick_sort(arr, left, i-1)
quick_sort(arr, i+1, right)
if __name__ == '__main__':
A = [random.randint(1, 2000) for _ in range(500)]
start = time.time()
insert_sort(A)
print("直接插入排序用时:", time.time()-start)
start = time.time()
shell_sort(A)
print("希尔排序用时:", time.time()-start)
start = time.time()
bubble_sort(A)
print("冒泡排序用时:", time.time()-start)
start = time.time()
quick_sort(A, 0, len(A)-1)
print("快速排序用时:", time.time()-start)
```
上述代码中,我们先生成了一个长度为500的随机整数数组A,分别使用了四种排序算法对其进行排序,并输出了各自的所用时间。
需要注意的是,在快速排序中,我们使用了递归的方式来实现,递归结束的条件是left >= right,即左右指针重合或者左指针已经超过右指针。同时,我们选择第一个元素作为基准值,每次将小于基准值的元素放在左边,大于基准值的元素放在右边,最后将基准值放在中间。
阅读全文