首頁 後端開發 Python教學 學習並實作Python中的選擇排序演算法

學習並實作Python中的選擇排序演算法

Feb 03, 2024 am 09:04 AM
原理 實現 選擇排序 排列

學習並實作Python中的選擇排序演算法

理解Python中的選擇排序原理與實作

選擇排序(Selection Sort)是一種簡單直觀的排序演算法,其基本思想是每次遍歷數組,在未排序部分中選擇最小(或最大)的元素,將其與未排序部分的第一個元素交換位置,然後繼續從未排序部分中選擇最小(或最大)的元素,依次類推,直到整個數組有序。選擇排序的時間複雜度為O(n^2),且它是一種不穩定的排序演算法。

下面透過具體的程式碼範例來說明選擇排序的實作過程。

def selection_sort(arr):
    n = len(arr)
    for i in range(n-1):
        min_idx = i
        for j in range(i+1, n):
            if arr[j] < arr[min_idx]:
                min_idx = j
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
登入後複製

以上是選擇排序演算法的實作程式碼。接下來我們將逐步解釋這段程式碼的原理和過程。

首先,我們定義了一個selection_sort函數,它接收一個待排序的陣列arr作為參數。

在函數體內,我們先取得數組的長度n,這是為了迭代n-1次,因為每次迭代都會將一個最小的元素放到正確的位置上,所以最後一個元素不需要再進行排序。

然後,我們使用兩個巢狀的for迴圈進行選擇排序的過程。外層循環從0到n-1,代表待排序部分的起始位置i。

內層循環從i 1到n,代表待排序部分的元素j。我們將j與起始位置i的元素進行比較,如果j小於起始位置i的元素,就將min_idx更新為j,表示j是目前找到的最小元素的索引。

當內層循環結束後,我們將找到的最小元素與起始位置i的元素交換位置,這樣當前迭代會將一個最小的元素放到正確的位置上。

透過n-1次迭代,我們可以保證整個陣列依照升序排列。

接下來,我們可以使用以下程式碼來測試選擇排序的效果:

arr = [64, 25, 12, 22, 11]
selection_sort(arr)
print("排序后的数组:")
for i in range(len(arr)):
    print(arr[i], end=" ")
登入後複製

輸出結果為:11 12 22 25 64,表示陣列已依照升序排列完成。

在實際使用中,選擇排序的效率較低,因此我們更傾向於使用其他更高效的排序演算法,例如快速排序或歸併排序。但是選擇排序作為一種簡單易懂的排序演算法,有利於初學者理解排序演算法的基本原理和想法。

總結起來,選擇排序就是每次從未排序部分選擇最小(或最大)的元素,放到已排序部分的末尾,通過多次迭代,最終達到整個數組有序的目的​​。掌握選擇排序的原理與實現,對於深入理解排序演算法以及程式設計能力的提升都具有重要意義。

以上是學習並實作Python中的選擇排序演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Bootstrap圖片居中需要用到flexbox嗎 Bootstrap圖片居中需要用到flexbox嗎 Apr 07, 2025 am 09:06 AM

Bootstrap 圖片居中方法多樣,不一定要用 Flexbox。如果僅需水平居中,text-center 類即可;若需垂直或多元素居中,Flexbox 或 Grid 更合適。 Flexbox 兼容性較差且可能增加複雜度,Grid 則更強大且學習成本較高。選擇方法時應權衡利弊,並根據需求和偏好選擇最適合的方法。

十大加密貨幣交易平台 幣圈交易平台app排行前十名推薦 十大加密貨幣交易平台 幣圈交易平台app排行前十名推薦 Mar 17, 2025 pm 06:03 PM

十大加密貨幣交易平台包括:1. OKX,2. Binance,3. Gate.io,4. Kraken,5. Huobi,6. Coinbase,7. KuCoin,8. Crypto.com,9. Bitfinex,10. Gemini。選擇平台時應考慮安全性、流動性、手續費、幣種選擇、用戶界面和客戶支持。

芝麻開門交易所怎麼調成中文 芝麻開門交易所怎麼調成中文 Mar 04, 2025 pm 11:51 PM

芝麻開門交易所怎麼調成中文?本教程涵蓋電腦、安卓手機端詳細步驟,從前期準備到操作流程,再到常見問題解決,幫你輕鬆將芝麻開門交易所界面切換為中文,快速上手交易平台。

c上標3下標5怎麼算 c上標3下標5算法教程 c上標3下標5怎麼算 c上標3下標5算法教程 Apr 03, 2025 pm 10:33 PM

C35 的計算本質上是組合數學,代表從 5 個元素中選擇 3 個的組合數,其計算公式為 C53 = 5! / (3! * 2!),可通過循環避免直接計算階乘以提高效率和避免溢出。另外,理解組合的本質和掌握高效的計算方法對於解決概率統計、密碼學、算法設計等領域的許多問題至關重要。

十大虛擬幣交易平台2025 加密貨幣交易app排名前十 十大虛擬幣交易平台2025 加密貨幣交易app排名前十 Mar 17, 2025 pm 05:54 PM

十大虛擬幣交易平台2025:1. OKX,2. Binance,3. Gate.io,4. Kraken,5. Huobi,6. Coinbase,7. KuCoin,8. Crypto.com,9. Bitfinex,10. Gemini。選擇平台時應考慮安全性、流動性、手續費、幣種選擇、用戶界面和客戶支持。

網頁批註如何實現Y軸位置的自適應佈局? 網頁批註如何實現Y軸位置的自適應佈局? Apr 04, 2025 pm 11:30 PM

網頁批註功能的Y軸位置自適應算法本文將探討如何實現類似Word文檔的批註功能,特別是如何處理批註之間的間�...

安全靠譜的數字貨幣平台有哪些 安全靠譜的數字貨幣平台有哪些 Mar 17, 2025 pm 05:42 PM

安全靠譜的數字貨幣平台:1. OKX,2. Binance,3. Gate.io,4. Kraken,5. Huobi,6. Coinbase,7. KuCoin,8. Crypto.com,9. Bitfinex,10. Gemini。選擇平台時應考慮安全性、流動性、手續費、幣種選擇、用戶界面和客戶支持。

如何優雅地解決換行後Span標籤間距過小的問題? 如何優雅地解決換行後Span標籤間距過小的問題? Apr 05, 2025 pm 06:00 PM

如何優雅地處理換行後的Span標籤間距在網頁佈局中,經常會遇到需要水平排列多個span...

See all articles