mackxu
子曰:学而时习之,不亦说乎?
 1 <?php
 2     
 3     /**
 4      * 交换$a,$b的值
 5      * 相当于把$a,$b位置交换了
 6      * 按引用传递,否者只是它们的副本交换了值
 7      * @param int $a    
 8      * @param int $b
 9      */
10     function swap(&$a, &$b) {
11         $temp = $a;            //临时变量保存$a值
12         $a = $b;
13         $b = $temp;
14     }
15     /**
16      * 输出数组元素
17      * @param array $arr
18      */
19     function display($arr) {
20         foreach ($arr as $value) {
21             echo $value." ";
22         }
23     }
24     //冒泡排序法
25     function bubble_sort(&$arr) {    
26         $len = count($arr);                //数组的长度
27         for ($out=0; $out<$len-1; $out++)
28             for ($in=0; $in<$len-1-$out; $in++) {
29                 //前面的元素大于后面的元素,交换位置
30                 if ($arr[$in]>$arr[$in+1])
31                     swap($arr[$in], $arr[$in+1]);
32             }
33     }
34     
35     //选择排序,选出最小的值与本趟循环的最左边值交换
36     function selection_sort(&$arr) {
37         for ($out=0; $out<count($arr)-1; $out++) {
38             $min_key = $out;            //记录一趟循环的最小值位置默认第一个位置
39             for ($in = $out+1; $in<count($arr); $in++) {
40                 if ($arr[$min_key] > $arr[$in])
41                     $min_key = $in;
42             }
43             swap($arr[$out], $arr[$min_key]);
44         } 
45     }
46     
47     //插入排序 待排元素的左边已经是有序元素,找到合适位置,插入
48     function insert_sort(&$arr) {
49         
50         //外循环从第二项开始
51         for ($out=1; $out<count($arr); $out++) {
52             $temp = $arr[$out];                //腾出位置
53             $in = $out;
54             while ($in>0 && $arr[$in-1]>$temp) {
55                 $arr[$in] = $arr[$in-1];    //向后移动一个位置
56                 $in--;
57             }
58             $arr[$in] = $temp;                //待排元素插入到腾出的位置上
59         }
60         
61     }
62     
63     
64     //----------------------  test --------
65     
66     $arr = array(5,2,4,3,1);
67     //bubble_sort($arr);
68     //selection_sort($arr);
69     insert_sort($arr);
70     display($arr);
posted on 2012-10-23 07:31  mackxu  阅读(258)  评论(0编辑  收藏  举报