主题
选择排序(Selection Sort)
选择排序是一种简单的比较类排序算法,通过不断选择剩余元素中的最小值,将其放到已排序序列末尾,直到全部排序完成。
📌 算法原理解释
- 从未排序序列中找到最小元素;
- 将最小元素与未排序序列的第一个元素交换;
- 移动边界,重复上述步骤直到所有元素排序完毕。
选择排序的时间复杂度固定为 O(n²),不管数据是否有序。
💻 多语言代码实现
javascript
// JavaScript 选择排序
function selectionSort(arr) {
const n = arr.length;
for (let i = 0; i < n - 1; i++) {
let minIdx = i;
for (let j = i + 1; j < n; j++) {
if (arr[j] < arr[minIdx]) minIdx = j;
}
if (minIdx !== i) {
[arr[i], arr[minIdx]] = [arr[minIdx], arr[i]];
}
}
return arr;
}
python
# Python 选择排序
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
if min_idx != i:
arr[i], arr[min_idx] = arr[min_idx], arr[i]
return arr
cpp
// C++ 选择排序
#include <vector>
using namespace std;
void selectionSort(vector<int>& arr) {
int n = arr.size();
for (int i = 0; i < n - 1; i++) {
int minIdx = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIdx]) minIdx = j;
}
if (minIdx != i) swap(arr[i], arr[minIdx]);
}
}
java
// Java 选择排序
public class SelectionSort {
public static void selectionSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
int minIdx = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIdx]) minIdx = j;
}
if (minIdx != i) {
int temp = arr[i];
arr[i] = arr[minIdx];
arr[minIdx] = temp;
}
}
}
}
php
<?php
// PHP 选择排序
function selectionSort(array &$arr): array {
$n = count($arr);
for ($i = 0; $i < $n - 1; $i++) {
$minIdx = $i;
for ($j = $i + 1; $j < $n; $j++) {
if ($arr[$j] < $arr[$minIdx]) $minIdx = $j;
}
if ($minIdx !== $i) {
[$arr[$i], $arr[$minIdx]] = [$arr[$minIdx], $arr[$i]];
}
}
return $arr;
}
?>
go
// Go 选择排序
package main
func selectionSort(arr []int) []int {
n := len(arr)
for i := 0; i < n-1; i++ {
minIdx := i
for j := i + 1; j < n; j++ {
if arr[j] < arr[minIdx] {
minIdx = j
}
}
if minIdx != i {
arr[i], arr[minIdx] = arr[minIdx], arr[i]
}
}
return arr
}
✅ 算法特点与总结
属性 | 描述 |
---|---|
时间复杂度 | 固定 O(n²) |
空间复杂度 | O(1)(原地排序) |
稳定性 | ❌ 不稳定 |
是否原地排序 | ✅ 是 |
📌 提示:选择排序简单但效率较低,适合教学和少量数据排序。