Home 常见排序算法介绍(二)
Post
Cancel

常见排序算法介绍(二)

归并排序(Merge Sort)

原理: 归并排序是一种分治算法,将列表不断分割为更小的子列表,然后将这些子列表按顺序合并以获得排序结果。

Python 实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def merge_sort(arr):
    if len(arr) <= 1:
        return arr

    mid = len(arr) // 2
    left_half = arr[:mid]
    right_half = arr[mid:]

    left_half = merge_sort(left_half)
    right_half = merge_sort(right_half)

    return merge(left_half, right_half)

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

# 使用示例
arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = merge_sort(arr)
print("排序后的数组:", sorted_arr)

堆排序(Heap Sort)

原理: 堆排序(Heap Sort)是一种基于堆的排序算法,它是利用堆这种数据结构进行排序的一种选择排序算法。

Python 实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def heapify(arr, n, i):
    largest = i
    left = 2 * i + 1
    right = 2 * i + 2
  
    if left < n and arr[i] < arr[left]:
        largest = left
  
    if right < n and arr[largest] < arr[right]:
        largest = right
  
    if largest != i:
        arr[i], arr[largest] = arr[largest], arr[i]
        heapify(arr, n, largest)
  
  
def heapSort(arr):
    n = len(arr)
  
    # 构建最大堆
    for i in range(n // 2 - 1, -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)
  
  
# 测试代码
arr = [12, 11, 13, 5, 6, 7]
heapSort(arr)
print("排序后的数组:", arr)

计数排序(Counting Sort)

原理: 计数排序是一种线性时间复杂度的排序算法,适用于元素范围较小的情况。它统计每个元素的出现次数,然后根据统计信息构建排序结果。

Python 实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def counting_sort(arr):
    max_val = max(arr)
    count_arr = [0] * (max_val + 1)
    sorted_arr = [0] * len(arr)

    for num in arr:
        count_arr[num] += 1

    for i in range(1, len(count_arr)):
        count_arr[i] += count_arr[i - 1]

    for num in reversed(arr):
        sorted_arr[count_arr[num] - 1] = num
        count_arr[num] -= 1

    return sorted_arr

# 使用示例
arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = counting_sort(arr)
print("排序后的数组:", sorted_arr)

桶排序(Bucket Sort)

原理: 桶排序将元素划分为多个桶,每个桶中的元素在特定范围内。然后对每个桶中的元素使用其他排序算法或递归桶排序,最后合并桶中的结果。

Python 实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def bucket_sort(arr):
    bucket_size = 10  # 桶的大小
    max_val = max(arr)
    min_val = min(arr)

    # 计算桶的数量
    num_buckets = (max_val - min_val) // bucket_size + 1
    buckets = [[] for _ in range(num_buckets)]

    for num in arr:
        index = (num - min_val) // bucket_size
        buckets[index].append(num)

    sorted_arr = []
    for bucket in buckets:
        sorted_arr.extend(sorted(bucket))

    return sorted_arr

# 使用示例
arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = bucket_sort(arr)
print("排序后的数组:", sorted_arr)
This post is licensed under CC BY 4.0 by the author.

常见排序算法介绍(一)

经典的外卖列表(双Table联动)