<?php /* 冒泡排序 原理:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。 */ /** * $data Array 待排序数据 * $sort Bool false 从小到大 true 从大到小 * return Array 排序结果 */ $data = array(16,2,33,4,25,61,57,88,19,120); function bubble_sort($data=array(),$sort=false) { $len= count($data); if($len<=1) return $data; for ($i=0; $i <$len ; $i++) { for ($j=$i+1; $j <$len ; $j++) { if(($data[$i]<$data[$j]) && $sort) { $temp = $data[$j]; $data[$j]=$data[$i]; $data[$i]=$temp; } if( ($data[$i]>$data[$j]) && !$sort) { $temp = $data[$i]; $data[$i]=$data[$j]; $data[$j]=$temp; } } } return $data; } // $result = bubble_sort($data); // echo '<pre>'; // print_r($result); /** * 快速排序 * 原理: * 通过一趟排序(参照一个待排序数字)将要排序的数据分割成独立的两部分 * 结果其中一部分的所有数据都比另外一部分的所有数据都要小 * 然后再按此方法对这两部分数据分别进行快速排序, * 整个排序过程可以递归进行,以此达到整个数据变成有序序列。 */ /** * $data Array 待排序数据 * $sort Bool false 从小到大 true 从大到小 * return Array 排序结果 */ function quick_sort($data=array(),$sort=false) { $len = count($data); if($len<=1) return $data; // 选取一个参考数字 把data分成两部分 $refer = $data[0]; // 保存较小的部分 $minarr = array(); // 保存较大的部分 $maxarr = array(); for ($i=1; $i <$len ; $i++) { if($data[$i] < $refer) { $minarr[] = $data[$i]; } else { $maxarr[] = $data[$i]; } } // 递归再次比较 minarr 和maxarr $minarr = quick_sort($minarr,$sort); $maxarr = quick_sort($maxarr,$sort); if(!$sort) { return array_merge($minarr,array($refer),$maxarr); } else { return array_merge($maxarr,array($refer),$minarr); } } // $result = quick_sort($data,true); // echo '<pre>'; // print_r($result); /** * 选择排序 * 原理: * 每一趟从待排序的数据元素中选出最小(或最大)的一个元素, * 顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 */ /** * $data Array 待排序数据 * $sort Bool false 从小到大 true 从大到小 * return Array 排序结果 */ function select_sort($data=array(),$sort=false) { $len = count($data); if($len<=1) return $data; for ($i=0; $i <$len ; $i++) { $refer = $i; //最小参考 for ($j=$i+1; $j <$len ; $j++) { if((($data[$j] < $data[$refer])&&!$sort)||(($data[$j] > $data[$refer])&&$sort)) { $refer = $j; } } if($refer!=$i) { $temp = $data[$refer]; $data[$refer] = $data[$i]; $data[$i]=$temp; } } return $data; } // $result = select_sort($data,true); // echo '<pre>'; // print_r($result);
未经允许不得转载:开心乐窝-乐在其中 » PHP三中常见的排序算法