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);