选择排序

原理:

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置 
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。 
重复第二步,直到所有元素均排序完毕。 

 

思路:

通过 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
)

  

  

posted @ 2019-03-15 19:45  诸城布拉德皮特  阅读(91)  评论(0编辑  收藏  举报