原理:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完.。
<?php
/**
* 选择排序
* 数据结构----------------数组
* 最差时间复杂度-----------O(n^2)
* 最优时间复杂度-----------O(n^2)
* 平均时间复杂度-----------O(n^2)
* 空间复杂度--------------O(1)
* 稳定性-----------------不稳定
*/
$arr = [1, 3, 34, 2, 32, 2, 78, -43, 53, -35, 0];
function SelectionSort($arr)
{
$length = count($arr);
for ($i = 0; $i < $length - 1; $i++) { // $i为已经排序序列的末尾下标
$min = $i; // 暂存未排列序列的最小值下标
for ($j = $i + 1; $j < $length; $j++) { // 遍历未排列序列
if ($arr[$j] < $arr[$min]) { // 找出排列序列最小值,下标赋给$min
$min = $j;
}
}
if ($min != $i) { // 如果找到最小值,放到已排列序列末尾
$t = $arr[$min];
$arr[$min] = $arr[$i];
$arr[$i] = $t;
}
}
return $arr;
}
print_r(SelectionSort($arr));