从第一个元素一次遍历,将这个元素以其之前元素一一比较,当发现有元素大于当前元素时,将其交换(之前的是有序的),以此类推
<?php
class SelectSort
{
public function sort(Array $arr)
{
$n = count($arr);
for($i = 1; $i < $n; $i++)
{
for($j = $i;$j > 0 && $arr[$j] < $arr[$j-1]; $j--)
{
$temp = $arr[$j];
$arr[$j] = $arr[$j - 1];
$arr[$j - 1] = $temp;
}
print_r($arr);
}
return $arr;
}
}
$selectSort = new SelectSort();
$params = array(1,3,7,5,2);
$result = $selectSort->sort($params);
print_r($result);
稳定排序
时间复杂度O(n²)
最好情况需要 0次交换和n-1次比较 (eg 有序数组,切顺序和期望相同)
最坏情况需要n²/2 次比较和 n²/2交换 (eg 有序数组且顺序和期望相反)
适用场景
数组中部分有序,这种情况减少了交换