排序算法__选择排序

 

 1 <?php
 2 
 3 $arr=array(1,43,54,62,21,66,32,78,36,76,39);  
 4 
 5 //实现思路 双重循环完成,外层控制轮数,当前的最小值。内层 控制的比较次数
 6 function selectSort($arr) {
 7     //$i 当前最小值的位置, 需要参与比较的元素
 8     for($i=0, $len=count($arr); $i<$len-1; $i++) {
 9         //先假设最小的值的位置
10         $p = $i;
11 
12         //$j 当前都需要和哪些元素比较,$i 后边的。
13         for($j=$i+1; $j<$len; $j++) {
14             //$arr[$p] 是 当前已知的最小值
15              //比较,发现更小的,记录下最小值的位置;并且在下次比较时,
16             if($arr[$p] > $arr[$j]) {
17                  // 应该采用已知的最小值进行比较。
18                 $p = $j;
19             }
20         }
21 
22         //已经确定了当前的最小值的位置,保存到$p中。
23         //如果发现 最小值的位置与当前假设的位置$i不同,则位置互换即可
24         if($p != $i) {
25             $tmp = $arr[$p];
26             $arr[$p] = $arr[$i];
27             $arr[$i] = $tmp;
28         }
29     }
30     
31     //返回最终结果
32     return $arr;
33 }
34 
35 $arr = selectSort($arr);
36 
37 echo "<pre>";
38 print_r($arr);
39 
40 
41 
42 
43 /*
44 Array
45 (
46     [0] => 1
47     [1] => 21
48     [2] => 32
49     [3] => 36
50     [4] => 39
51     [5] => 43
52     [6] => 54
53     [7] => 62
54     [8] => 66
55     [9] => 76
56     [10] => 78
57 )
58 */
View Code

 

 

该算法使用了交换操作,仅使用了一个辅助单元, 因此其算法空间复杂度为O(1)

 

时间复杂度如下所示:

T(n) = ∑i=1n-1 (n-i) = n(n-1) / 2 = O(n2) 

 

posted @ 2017-02-22 01:11  _logan  阅读(109)  评论(0编辑  收藏  举报