ToolkitX
知识库工具箱

算法基础

排序、搜索、递归、分治

30min·进阶

01. 排序算法

排序是将数据按特定顺序排列的过程。常见排序算法的时间复杂度和特点: 冒泡排序:O(n²),简单但效率低,稳定排序。 选择排序:O(n²),不稳定,交换次数少。 插入排序:O(n²),对几乎有序的数据效率高。 快速排序:O(n log n) 平均,不稳定,实际应用最广泛。 归并排序:O(n log n),稳定,需要额外空间。 堆排序:O(n log n),不稳定,原地排序。
python
# 快速排序
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)

# 归并排序
def merge_sort(arr):
if len(arr) <= 1:
    return arr

mid = len(arr) // 2
left = merge_sort(arr[:mid])
right = merge_sort(arr[mid:])

return merge(left, right)

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

print(quick_sort([3, 6, 8, 10, 1, 2, 1]))
# [1, 1, 2, 3, 6, 8, 10]

02. 搜索算法

搜索是在数据集合中查找特定元素的过程。 线性搜索:逐个检查元素,时间复杂度 O(n)。适用于无序数据。 二分搜索:在有序数据中反复折半查找,时间复杂度 O(log n)。效率极高。 二分搜索的前提是数据必须有序。每次比较排除一半的搜索空间。
python
# 二分搜索(迭代版)
def binary_search(arr, target):
left, right = 0, len(arr) - 1

while left <= right:
    mid = (left + right) // 2
    if arr[mid] == target:
        return mid
    elif arr[mid] < target:
        left = mid + 1
    else:
        right = mid - 1

return -1

# 二分搜索(递归版)
def binary_search_recursive(arr, target, left, right):
if left > right:
    return -1

mid = (left + right) // 2
if arr[mid] == target:
    return mid
elif arr[mid] < target:
    return binary_search_recursive(arr, target, mid + 1, right)
else:
    return binary_search_recursive(arr, target, left, mid - 1)

# 测试
sorted_arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(binary_search(sorted_arr, 7))  # 6
print(binary_search(sorted_arr, 11)) # -1

知识测验

1/5正确 0

快速排序的平均时间复杂度是?

下一节

设计模式

下一节