总是对这两种排序特别迷糊,今天趁活不多,认真看了下,也算对自己有个交代吧
第一:冒泡排序
// 默认从小到大排序
// 若从小到大则第二个参数为true
function bubbling_sort($arr,$state = false){
$length = count($arr);
for ($i=0; $i < $length; $i++) {
for ($j= 0 ; $j < $length - $i-1; $j++) {
if(!$state){
if($arr[$j] > $arr[$j+1]){
$center = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $center;
}
}else{
if($arr[$j] < $arr[$j+1]){
$center = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $center;
}
}
}
}
return $arr;
}
上午写了冒泡法,整体思路还是很清晰的,但是到快速排序法的时候有点懵,又整理下思路
代码如下
function quickSort($array){
if(!isset($array[1]))
return $array;
//获取一个用于分割的关键字,一般是首个元素
$mid = $array[0];
$leftArray = array();
$rightArray = array();
unset($array[0]);
foreach($array as $v){
if($v > $mid){
//把比$mid大的数放到一个数组里
$rightArray[] = $v;
}else{
//把比$mid小的数放到另一个数组里
$leftArray[] = $v;
}
}
//把比较小的数组再一次进行分割
$leftArray = quickSort($leftArray);
$leftArray[] = $mid;
//把比较大的数组再一次进行分割
$rightArray = quickSort($rightArray);
//组合两个结果
return array_merge($leftArray,$rightArray);
}
这里主要就是先用一个分割值(首元素),对数组进行循环遍历,然后把比分割值大的放到一个数组中,比分割值小的放到另外一个数组中
再递归调用,最后合并数组
快速排序相对来说效率较高
还可以使用for循环
如下
function quick_sort($array){
$left_array = array();
$right_array = array();
if(!isset($array[1])) return $array;
$key = $array[0];
for($i=1;$i<$length;$i++){
if($array[$i] > $key){
$right_array[] = $array[$i];
}else{
$left_array[] = $array[$i];
}
}
$left_array = quick_sort($left_array);
$right_array = quick_sort($right_array);
return array_merge($right_array,array($key),$left_array);
}
这段代码是复制一篇文章的...链接找不到了...
今天总算把冒泡排序和快速排序给看完了,具体优化升级什么的...以后再看吧