欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python堆排序的實(shí)現(xiàn)示例

 更新時(shí)間:2023年11月06日 10:15:24   作者:Echo_Wish  
堆排序是一種基于二叉堆數(shù)據(jù)結(jié)構(gòu)的排序算法,本文主要介紹了Python堆排序的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下

堆排序(Heap Sort)是一種基于二叉堆數(shù)據(jù)結(jié)構(gòu)的排序算法,它通過將元素構(gòu)建成一個(gè)最大堆或最小堆,然后重復(fù)從堆中移除根節(jié)點(diǎn),直到堆為空,從而得到有序數(shù)組。堆排序是一種原地排序算法,具有穩(wěn)定的時(shí)間復(fù)雜度,通常效率較高。本文將詳細(xì)介紹堆排序的工作原理和Python實(shí)現(xiàn)。

堆排序的工作原理

堆排序的基本思想是:

  • 構(gòu)建一個(gè)最大堆或最小堆,將數(shù)組元素視為二叉樹的節(jié)點(diǎn)。
  • 交換堆的根節(jié)點(diǎn)(最大值或最小值)和堆的最后一個(gè)節(jié)點(diǎn)。
  • 從堆中移除最后一個(gè)節(jié)點(diǎn),然后維護(hù)堆的性質(zhì)。
    4, 重復(fù)步驟 2 和 3,直到堆為空。
    堆可以被看作是一個(gè)二叉樹,其中每個(gè)節(jié)點(diǎn)的值都大于或小于其子節(jié)點(diǎn)的值,根據(jù)堆的性質(zhì),我們可以得到最大堆和最小堆兩種堆的排序方式。最大堆要求父節(jié)點(diǎn)的值大于等于子節(jié)點(diǎn)的值,最小堆要求父節(jié)點(diǎn)的值小于等于子節(jié)點(diǎn)的值。

下面是一個(gè)示例,演示堆排序的過程:

原始數(shù)組:[9, 6, 5, 2, 8]

  • 構(gòu)建最大堆,得到 [9, 8, 5, 2, 6]。
  • 交換根節(jié)點(diǎn) 9 和最后一個(gè)節(jié)點(diǎn) 6,得到 [6, 8, 5, 2, 9]。
  • 從堆中移除節(jié)點(diǎn) 9,然后維護(hù)堆的性質(zhì),得到 [8, 6, 5, 2]。
    4, 重復(fù)步驟 2 和 3,直到堆為空。

Python實(shí)現(xiàn)堆排序

下面是Python中的堆排序?qū)崿F(xiàn):

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)

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[i], arr[0] = arr[0], arr[i]
        heapify(arr, i, 0)
  • arr 是待排序的數(shù)組。
  • heapify 函數(shù)用于將節(jié)點(diǎn) i 下沉,以維護(hù)最大堆的性質(zhì)。
  • heap_sort 函數(shù)用于構(gòu)建最大堆和執(zhí)行堆排序。

示例代碼

下面是一個(gè)使用Python進(jìn)行堆排序的示例代碼:

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)

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

# 測(cè)試排序
arr = [9, 6, 5, 2, 8]
heap_sort(arr)
print("排序后的數(shù)組:", arr)

時(shí)間復(fù)雜度

堆排序的時(shí)間復(fù)雜度為 O(n log n),其中 n 是數(shù)組的長(zhǎng)度。它是一種原地排序算法,不需要額外的空間,因此非常適合排序大型數(shù)據(jù)集。

總之,堆排序是一種高效的排序算法,通過構(gòu)建最大堆并重復(fù)移除根節(jié)點(diǎn),實(shí)現(xiàn)了對(duì)數(shù)組的排序。了解堆排序有助于理解堆數(shù)據(jù)結(jié)構(gòu)和排序算法的結(jié)合使用,提供了一種高效的排序解決方案。

到此這篇關(guān)于Python堆排序的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Python堆排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解用Python調(diào)用百度地圖正/逆地理編碼API

    詳解用Python調(diào)用百度地圖正/逆地理編碼API

    這篇文章主要介紹了詳解用Python調(diào)用百度地圖正/逆地理編碼API,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • python簡(jiǎn)單批量梯度下降代碼

    python簡(jiǎn)單批量梯度下降代碼

    大家好,本篇文章主要講的是python簡(jiǎn)單批量梯度下降代碼,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Python中的二維數(shù)組實(shí)例(list與numpy.array)

    Python中的二維數(shù)組實(shí)例(list與numpy.array)

    下面小編就為大家分享一篇Python中的二維數(shù)組實(shí)例(list與numpy.array),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python如何使用ConfigParser讀取配置文件

    Python如何使用ConfigParser讀取配置文件

    這篇文章主要介紹了Python如何使用ConfigParser讀取配置文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • python通過pil為png圖片填充上背景顏色的方法

    python通過pil為png圖片填充上背景顏色的方法

    這篇文章主要介紹了python通過pil為png圖片填充上背景顏色的方法,實(shí)例分析了Python使用pil模塊操作png圖片的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-03-03
  • 詳解Python中dict與set的使用

    詳解Python中dict與set的使用

    這篇文章主要介紹了詳解Python中dict與set的使用,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • python輸出后面多一個(gè)None問題

    python輸出后面多一個(gè)None問題

    在Python中,函數(shù)如果沒有顯式指定返回值,會(huì)默認(rèn)返回`None`,例如,計(jì)算一個(gè)數(shù)的平方根并輸出,如果沒有處理`None`,會(huì)輸出結(jié)果后跟`None`
    2024-11-11
  • Python字典取鍵、值對(duì)的方法步驟

    Python字典取鍵、值對(duì)的方法步驟

    這篇文章主要介紹了Python字典取鍵、值對(duì)的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 詳解Python圖像處理庫Pillow常用使用方法

    詳解Python圖像處理庫Pillow常用使用方法

    PIL(Python Imaging Library)是Python一個(gè)強(qiáng)大方便的圖像處理庫,只支持到Python2.7。這篇文章主要介紹了Python圖像處理庫Pillow常用使用方法,需要的朋友可以參考下
    2019-09-09
  • 詳解tensorflow2.x版本無法調(diào)用gpu的一種解決方法

    詳解tensorflow2.x版本無法調(diào)用gpu的一種解決方法

    這篇文章主要介紹了詳解tensorflow2.x版本無法調(diào)用gpu的一種解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評(píng)論