📅  最后修改于: 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_half
和 right_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 合并排序的介绍,希望能对你有所帮助。