自我对冒泡排序以及对快速排序的理解
来源:互联网 发布:115网络异常请重试 编辑:程序博客网 时间:2024/05/21 00:16
首先呢,我们闲话少说,直接入主题吧冒泡:其实冒泡就是一组数据,让它们左右两位进行排序,若数组的要求是要从大到小排序,那么就让小的数与大的数交换位置,交换位置就是根据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));