选择排序(Selection Sort) 选择排序是一种简单的比较类排序算法,通过不断选择剩余元素中的最小值,将其放到已排序序列末尾,直到全部排序完成。
📌 算法原理解释 从未排序序列中找到最小元素;将最小元素与未排序序列的第一个元素交换;移动边界,重复上述步骤直到所有元素排序完毕。选择排序的时间复杂度固定为 O(n²),不管数据是否有序。
💻 多语言代码实现 javascriptpythoncppjavaphpgojavascript// 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 arrcpp// C++ 选择排序
#include
using namespace std;
void selectionSort(vector
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 选择排序
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)(原地排序)稳定性❌ 不稳定是否原地排序✅ 是📌 提示:选择排序简单但效率较低,适合教学和少量数据排序。