选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对 n 个元素的表进行排序总共进行至多 n -1 次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种
1 <?php
2 $arr = array(12, 234, 33, 23, 1, 54, 0);
3 $ar = array(
4 array('name'=>'liming', 'sex'=>'male', 'score'=>90),
5 array('name'=>'asd', 'sex'=>'male', 'score'=>89),
6 array('name'=>'bdf', 'sex'=>'female', 'score'=>92),
7 array('name'=>'rgeg', 'sex'=>'male', 'score'=>60)
8 );
9
10 //交换两个数
11 function swap(&$x, &$y){
12 $temp = $x;
13 $x = $y;
14 $y = $temp;
15 }
16
17 //选择排序
18 function xuanze1(&$a){
19 $t = count($a);
20 for($i=0; $i<$t-1; $i++){
21 $k = $i;
22 for($j=$i+1; $j<$t; $j++){
23 if($a[$j]<$a[$k]){
24 $k = $j;
25 }
26 }
27 if($k != $i){
28 swap($a[$i], $a[$k]);
29 }
30 }
31 }
32 //双向选择排序
33 function xuanze2(&$a){
34 $t = count($a);
35 $low = 0;
36 $high = $t-1;
37 while($low < $high){
38 print_r($a);
39 echo "<br/>";
40 $min = $low;
41 $max = $high;
42 for($i=$low; $i<=$high; $i++){
43 if($a[$i]>$a[$max]){
44 $max = $i;
45 }else if($a[$i]<$a[$min]){
46 $min = $i;
47 }
48 }
49 if($min != $low){
50 swap($a[$low], $a[$min]);
51 }
52 if($min==$high && $max==$low){
53 //当最小数出现在最右端,同时最大数出现在最左端,会出现交换两次的情况
54 }
55 else if($max!=$high){
56 swap($a[$high], $a[$max]);
57 }
58 $low++;
59 $high--;
60 }
61 }
62
63 //二维数组选择
64 function xuanze3(&$a, $key){
65 $t = count($a);
66 for($i=0; $i<$t-1; $i++){
67 $k = $i;
68 for($j=$i+1; $j<$t; $j++){
69 if($a[$j][$key] < $a[$k][$key]){
70 $k = $j;
71 }
72 }
73 if($k != $i){
74 swap($a[$k], $a[$i]);
75 }
76 }
77 }
78 ?>

328

被折叠的 条评论
为什么被折叠?



