目录
一、低效率的算法:冒泡排序
冒泡排序是一种简单但效率较低的排序算法。它的时间复杂度为 𝑂(𝑛2)O(n2),在处理大规模数据时性能非常差。
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
# 示例数组
arr = [64, 34, 25, 12, 22, 11, 90]
# 执行冒泡排序
bubble_sort(arr)
print("Sorted array is:", arr)
二、优化后的算法:快速排序
快速排序(QuickSort)是一种效率较高的排序算法,通常采用分治法来实现。它的平均时间复杂度为 𝑂(𝑛log𝑛)O(nlogn),在大多数情况下比冒泡排序要快得多。
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
# 示例数组
arr = [64, 34, 25, 12, 22, 11, 90]
# 执行快速排序
sorted_arr = quick_sort(arr)
print("Sorted array is:", sorted_arr)
三 优化算法说明:
优化算法的详细解释
- 选择一个基准点(Pivot):选择数组的中间元素作为基准点。
- 分割数组:将数组分割成三个部分:
- 小于基准点的元素
- 等于基准点的元素
- 大于基准点的元素
- 递归排序:对小于基准点和大于基准点的部分分别进行快速排序。
- 合并结果:将排序后的三个部分合并,得到最终的排序数组。
比较与优化
- 冒泡排序:每次都需要比较相邻元素,并交换位置,最坏情况下需要进行 𝑛2n2 次比较和交换。
- 快速排序:通过选择基准点,将数组分割成较小的子数组,然后递归排序。这种分治法大大减少了比较和交换的次数。
性能对比
- 时间复杂度:
- 冒泡排序:𝑂(𝑛2)O(n2)
- 快速排序:平均情况下 𝑂(𝑛log𝑛)O(nlogn)
- 空间复杂度:
- 冒泡排序:𝑂(1)O(1)(原地排序)
- 快速排序:𝑂(log𝑛)O(logn)(递归调用栈空间)