Python排序算法之堆排序算法

  • Post category:Python

下面是详细讲解“Python排序算法之堆排序算法”的完整攻略,包含两个示例说明。

堆排序算法

堆排序算法是种基于二叉堆的排序算法。它的基本思想是将待排序的序列构建成一个二叉堆,然后不断将堆顶元素与堆底元素交换,再重新调整堆,直到整个序列有序为止。

堆排序算法的Python实现

下面是一个示例代码,用于实现堆排序算法:

def heap_sort(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[0], arr[i] = arr[i], arr[0]
        heapify(arr, i, 0)

def heapify(arr, n, i):
    largest = i
    left = 2 * i + 1
    right = 2 * i + 2

    if left < n and arr[left] > arr[largest]:
        largest = left

    if right < n and arr[right] > arr[largest]:
        largest = right

    if largest != i:
        arr[i], arr[largest] = arr[largest], arr[i]
        heapify(arr, n, largest)

这个代码定义了两个函数:heap_sort和heapify。heap_sort函数用于实现堆排序算法。它先将待排序的序列构建成一个二叉堆,然后不断将堆顶元素与堆底元素交换,再重新调整堆,直到整个序列有序为止。heapify函数用于调整堆。它接受数组arr、堆的大小n和一个索引i作为参数,将以i为根节点的子树调整为一个堆。

示例1:对整数组进行排序

让我们使用堆排序算法对整数数组进行排序。我们将以下代码:

arr = [3, 2, 1, 5, 4]
heap_sort(arr)
print(arr)

这个代码使用heap_sort函数对整数数组arr进行排序。我们调用heap_sort函数,并将arr作为参数传递。最后,我们打印结果。

输出结果为:

[1, 2, 3, 4, 5]

这表示整数数组arr已经按升序排列。

示例2:对字符串数组进行排序

让我们使用堆排序算法对字符串数组进行排序。我们将以下代码:

arr = ['apple', 'banana', 'orange', 'pear', 'grape']
heap_sort(arr)
print(arr)

这个代码使用heap_sort函数对字符串数组arr进行排序。我们调用heap_sort函数,并将arr作为参数传递。最后,我们打印输出结果。

输出结果为:

['apple', 'banana', 'grape', 'orange', 'pear']

这表示字符串数组arr已经按字母顺序排列。

希望这攻略帮助你理解如何使用Python实现堆排序算法。