一、原理
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
二、实现
1、PHP
function selectionSort($array)
{
if (!is_array($array)) { // 执行数组,执行 1次
return [];
}
$n = count($array);
if ($n <= 0) { // 空数组,执行1次
return [];
}
if ($n === 1) { // 一条数据数组,执行1次
return $array;
}
for ($i = 0; $i < $n, $i++) { // 比较轮数 执行 n次
$minIndex = $i;
for ($j = $i + 1; $j < $n; $j++) { // 比较次数 执行 (n-1) + (n-2)+ ... + 1 次
if ($array[$minIndex] > $array[$j]) {
$minIndex = $j;
}
}
if ($minIndex != $i) {
$temp = $array[$i];
$array[$i] = $array[$minIndex];
$array[$minIndex] = $temp;
}
}
return $array;
}
2、javascript
function selectionSort(arr)
{
for (let i = 0; i < arr.length; i++) {
let minIndex = i;
for (let j = i + 1; j < arr.length; j++) {
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
if (minIndex != i) {
let temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
三、时间复杂度
计算方式:1 + 1 + 1 + n * (n-1) / 2
最终时间复杂度为O(n^2)
四、稳定性
不稳定