1. 概述
- 思路:循环数组,查找到最小元素,与当前元素换位置。
- 稳定性:不稳定。(比如数组[5,8,5,2]中,为第一个元素找最小的数为2,交换5和2的位置,导致原序的两个5的前后顺序改变了)
-
2. 实现代码
```php <?php class SelectSort { private $ori = []; public $new = []; public function __construct(array $arr) {
$this->ori = $arr;$r = $this->select($this->ori);$this->new = $r;
}
private function select(array $arr) {
for($i = 0; $i < floor(count($arr) / 2); $i++) {// 最大最小指针,前后一起处理$minPos = $i;$maxPos = count($arr) - 1 - $i;for ($j = $i + 1; $j < count($arr); $j++) {($arr[$j] < $arr[$minPos]) && $minPos = $j;($arr[count($arr) - 1 - $j] > $arr[$maxPos]) && $maxPos = count($arr) - 1 - $j;}$arr = $this->swap($arr, $i, $minPos);$arr = $this->swap($arr, count($arr) - $i - 1, $maxPos);}return $arr;
}
public function swap(array $arr, int $i, int $j) {
$tmp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $tmp; return $arr;} }
$arr = [5, 3, 6, 8, 1, 7, 9, 4, 2]; $cls = new SelectSort($arr); print_r($cls->new); ```
