# Python怎么實現最簡單的選擇排序
選擇排序(Selection Sort)是最基礎的排序算法之一,其核心思想是每次從未排序部分選出最?。ɑ蜃畲螅┰?,放到已排序部分的末尾。本文將詳細介紹如何用Python實現最簡單的選擇排序,并分析其時間復雜度和適用場景。
---
## 一、選擇排序算法原理
### 1. 算法步驟
1. **初始狀態**:整個數組分為已排序區(空)和未排序區(完整數組)
2. **迭代過程**:
- 在未排序區中找到最小元素
- 將該元素與未排序區的第一個元素交換位置
- 已排序區長度+1,未排序區長度-1
3. **終止條件**:未排序區只剩1個元素時自動有序
### 2. 動態示意圖
初始:[64, 25, 12, 22, 11] 第1輪:[11, 25, 12, 22, 64] # 11與64交換 第2輪:[11, 12, 25, 22, 64] # 12與25交換 第3輪:[11, 12, 22, 25, 64] # 22與25交換 第4輪:[11, 12, 22, 25, 64] # 已有序
---
## 二、Python實現代碼
### 基礎實現版本
```python
def selection_sort(arr):
n = len(arr)
for i in range(n-1): # 只需要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]
return arr
# 測試用例
print(selection_sort([64, 25, 12, 22, 11])) # 輸出 [11, 12, 22, 25, 64]
def selection_sort_optimized(arr):
n = len(arr)
for i in range(n//2):
min_idx, max_idx = i, n-i-1
for j in range(i+1, n-i):
if arr[j] < arr[min_idx]:
min_idx = j
if arr[j] > arr[max_idx]:
max_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]
# 處理最大值可能被移動的情況
if max_idx == i:
max_idx = min_idx
arr[n-i-1], arr[max_idx] = arr[max_idx], arr[n-i-1]
return arr
場景 | 復雜度 |
---|---|
最好情況 | O(n2) |
最壞情況 | O(n2) |
平均情況 | O(n2) |
特性 | 選擇排序 | 冒泡排序 |
---|---|---|
交換次數 | O(n) | O(n2) |
比較次數 | O(n2) | O(n2) |
穩定性 | 不穩定 | 穩定 |
最佳情況 | 仍需全部比較 | 可提前終止 |
選擇排序雖然簡單,但包含了算法設計中”選擇-交換”的核心思想,是理解更復雜排序算法的重要基礎。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。