PHP算法之快速排序、冒泡排序
快速排序
<?php Class Sort { //快速排序 public function quickly($array) { //判断排序的数组是否大于1 if (count($array)<=1) { return $array; } //先找出一个中间值 $middle = $array[0]; //用来存储分好类的元素 $right = array(); $left = array(); for ($i=1; $i < count($array); $i++) { if ($array[$i]>$middle) { $right[] = $array[$i];//如果$array[$i]大于中间值,就放到中间值得右边 }else{ $left[] = $array[$i];//如果$array[$i]小于中间值,就放到中间值的左边 } } //排完一次序之后在继续比较,直到所有的元素都排序完为止1 $right = $this->quickly($right); $left = $this->quickly($left); //合并排序好的数组 return array_merge($left,array($middle),$right); } } $arr = array(14,13,12,16,1,20,12); $sort = new Sort(); $quickly = $sort->quickly($arr); var_dump($quickly); ?>
输出
array (size=7)
0 => int 1
1 => int 12
2 => int 12
3 => int 13
4 => int 14
5 => int 16
6 => int 20
冒泡排序
<?php Class Sort { //冒泡排序 public function bubble($arr) { for ($i=0; $i < count($arr); $i++) { for ($j=0; $j < count($arr)-1; $j++) { //这一步比较数组里元素的大小,进行换位 if ($arr[$i] < $arr[$j]) { $tmp = $arr[$i];//$tmp是临时变量,临时存储数组的值 $arr[$i] = $arr[$j];//把数组中的值进行替换,此时$arr[$i]的键对应的就是$arr[$j]的值 $arr[$j] = $tmp;//因为已经把$arr[$j]的值替换了$arr[$i],所以现在把之前临时变量存储的值替换此时$arr[$j]的值 } } } return $arr; } } $sort = new Sort(); $arr = array(14,13,12,16,1,20,12); $bubble = $sort->bubble($arr); var_dump($bubble); ?>
输出
array (size=7)
0 => int 1
1 => int 12
2 => int 12
3 => int 13
4 => int 14
5 => int 16
6 => int 20