选择排序
原理:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。
思路:
通过 n - i 次关键字间的比较,从 n - i + 1 个记录中选出关键字最小的记录,并和第 i (1 <= i <= n) 个记录交换,执行n-1趟 后就完成了记录序列的排序。
代码:<?php
$arr=array(50,2,45,12,46,47,23,40,15,60,39,67,80,34);
//调用排序方法
echo "<pre>";
print_r(select_sort($arr));
function select_sort($arr) {
//实现思路 双重循环完成,外层控制轮数,当前的最小值。内层 控制的比较次数
//$i 当前最小值的位置, 需要参与比较的元素
for($i=0, $len=count($arr); $i<$len-1; $i++){
//先假设最小的值的位置
$p = $i;
//$j 当前都需要和哪些元素比较,$i 后边的。
for($j=$i+1; $j<$len; $j++){
//$arr[$p] 是 当前已知的最小值
if($arr[$p] > $arr[$j]){
//比较,发现更小的,记录下最小值的位置;并且在下次比较时,
// 应该采用已知的最小值进行比较。
$p = $j;
}
}
//已经确定了当前的最小值的位置,保存到$p中。
//如果发现 最小值的位置与当前假设的位置$i不同,则位置互换即可
if($p != $i){
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}
//返回最终结果
return $arr;
输出:
Array ( [0] => 2 [1] => 12 [2] => 15 [3] => 23 [4] => 34 [5] => 39 [6] => 40 [7] => 45 [8] => 46 [9] => 47 [10] => 50 [11] => 60 [12] => 67 [13] => 80 )