首先呢,我们闲话少说,直接入主题吧
冒泡:其实冒泡就是一组数据,让它们左右两位进行排序,若数组的要求是要从大到小排序,那么就让小的数与大的数交换位置,交换位置就是根据for里面的key值进行交换,但是还有一点就是不得不提的就是,我们需要给这个排序一个标志,在排序的开始,我们让这个标志位false,最后再for里面进行交换位置的时候,我们再把这个标志换成true
代码如下:
function maopao($arr)
{
$len = count($arr);
for($i=1; $i<$len; $i++)//最多做n-1趟排序
{
$flag = false; //本趟排序开始前,交换标志应为假
for($j=$len-1;$j>=$i;$j--)
{
if($arr[$j]<$arr[$j-1])//交换记录
{//如果是从大到小的话,只要在这里的判断改成if($arr[$j]>$arr[$j-1])就可以了
$x=$arr[$j];
$arr[$j]=$arr[$j-1];
$arr[$j-1]=$x;
$flag = true;//发生了交换,故将交换标志置为真
}
}
if(! $flag)//本趟排序未发生交换,提前终止算法
return $arr;
}
}
$shuz = array('12','44','1','84','5');
$bb = maopao($shuz);
print_r($bb);
echo "<br/>";
接下来,我们说一下,那个快速排序法
其实相比而言的话,我个人认为这个快速比这个冒泡法方便一下,好了,闲话少说,直入主题
首先快速排序法,它所进行排序的根据,就是这个数组里面的一个基数,一般我们都会取这组数组的最后
一个元素或者第一元素作为这个被比较的基数,我们需要创建两个数组,然后再for里面,让其他值分别与
该基数进行比较,若大于基数则就放到一个数组里面,若小于的话就放到另一个数组里面,最后呢,我们
再用array_merge函数将这三个数组拼成一个数组,这便是排序
代码如下:
function kuaisu($arr){
$len = count($arr);
if($len <= 1){
return $arr;
}
$key = $arr[0];
$left_arr = array();
$right_arr = array();
for($i=1; $i<$len;$i++){
if($arr[$i] <= $key){
$left_arr[] = $arr[$i];
}else{
$right_arr[] = $arr[$i];
}
}
$left_arr = kuaisu($left_arr);
$right_arr = kuaisu($right_arr);
return array_merge($left_arr, array($key), $right_arr);
}
$arr = array(23,98,54,2,9,62,34);
print_r(kuaisu($arr));