PHP冒泡排序法

冒泡排序法是一种很基础的排序方法,也是面试题中经常问到的一道题目.今天做了一下简单的分析,具体代码和思路如下。

 1 $array = array(12,45,877,35,545,87,32,2,48,966,252);
 2 
 3     function bubbling($arr){
 4         $length=count($arr);
 5         for($i=0;$i<$length;$i++){
 6             //$length-$i-1:第一次循环$arr[0]除了不和自己比较外要和其他的$length-1个元素比较
 7             //第一次循环后可以确定数组最后一个元素是最小的,所以可以不参与后面的比较,所以第二次循环
 8             //$arr[1]除了不和自己比较外还不和最后的一个元素比较,所以比较$length-$i-1次
 9             for($j=0;$j<$length-$i-1;$j++){
10                 //如果后面的元素比前面的元素大,就调换位置,需要借助中间变量$tmp
11                 if($arr[$j]<$arr[$j+1]){
12                     $tmp=$arr[$j];
13                     $arr[$j]=$arr[$j+1];
14                     $arr[$j+1]=$tmp;
15                 }
16             }
17         }
18         return $arr;
19 
20     }
21 
22     $list=bubbling($array);
23     var_dump($list);

排序后的结果为:array(11) { [0]=> int(966) [1]=> int(877) [2]=> int(545) [3]=> int(252) [4]=> int(87) [5]=> int(48) [6]=> int(45) [7]=> int(35) [8]=> int(32) [9]=> int(12) [10]=> int(2) }