📜  Python合并排序(1)

📅  最后修改于: 2023-12-03 15:19:32.306000             🧑  作者: Mango

Python 合并排序

合并排序是一种非常高效的排序算法,可以将一个未排序的列表按升序或降序排列。在这个算法中,我们将待排序的列表拆分成两部分,然后递归地排序每个子列表,最终将它们合并在一起。

算法复杂度为 O(nlogn),其中 n 是待排序列表的大小。因此,合并排序算法是一种非常可靠和高效的排序算法,在很多地方都得到了广泛应用。

下面我们来看一下 Python 合并排序的实现过程。

实现过程
def merge_sort(arr):
    if len(arr) > 1:
        mid = len(arr) // 2
        left_half = arr[:mid]
        right_half = arr[mid:]

        merge_sort(left_half)
        merge_sort(right_half)

        i = 0
        j = 0
        k = 0

        while i < len(left_half) and j < len(right_half):
            if left_half[i] < right_half[j]:
                arr[k] = left_half[i]
                i += 1
            else:
                arr[k] = right_half[j]
                j += 1
            k += 1

        while i < len(left_half):
            arr[k] = left_half[i]
            i += 1
            k += 1

        while j < len(right_half):
            arr[k] = right_half[j]
            j += 1
            k += 1
函数解释

该代码中包含一个名为 merge_sort() 的函数,该函数接收待排序的列表作为参数。

在函数中,我们首先检查列表长度是否大于 1。如果列表长度小于或等于 1,则无需排序,我们将其作为已排序状态返回。否则,我们计算列表的中间位置,并将其拆分成两个子列表 left_halfright_half

接下来,我们使用递归来对两个子列表进行排序,直到每个子列表长度小于或等于 1。递归调用 merge_sort() 函数来对子列表进行排序。

最后,我们将每个子列表的元素合并到一起,并将其放在原始列表中。在合并过程中,我们比较两个子列表的元素,并将所有元素按顺序复制到原始列表中。

调用示例
arr = [3, 2, 7, 6, 5, 1, 8, 4]
merge_sort(arr)
print(arr)

输出:

[1, 2, 3, 4, 5, 6, 7, 8]

上面的示例代码中,我们创建了一个未排序的列表 arr,然后调用 merge_sort() 函数来对其进行排序。最后,我们打印已排序的列表。

合并排序算法的实现非常简单,代码易于理解和实现。而且它效率高、可靠性好,被广泛应用于各种需要排序操作的场景中。

以上是 Python 合并排序的介绍,希望能对你有所帮助。