复习一下基础:前提:使用冒泡排序、快速排序、选择排序、插入排序对下面数组中的值进行升序排序。$arr(1,43,54,62,21,66,32,78,36,76,39);1、冒泡排序思路分析:在一组待排序的数中,将尚未排序的数排序,从前到后比较调整相邻的两个数,使较大的数下沉,较小的数上升。即每当比较两个相邻的数,发现它们的排序与排序要求相反时,就将它们交换。代码实现:$arr=array(1,43,54,62,21,66,32,78,36,76,39);函数bubbleSort($arr){$len=count($arr);//Layer循环控制需要冒泡的轮数for($i=1;$i<$len;$i++){//这一层循环用来控制一个数需要冒泡的次数在每一轮中进行比较for($k=0;$k<$len-$i;$k++){if($arr[$k]>$arr[$k+1]){$tmp=$arr[$k+1];$arr[$k+1]=$arr[$k];$arr[$k]=$tmp;}}}返回$arr;}2。选择排序思路分析:在一组待排序的数中,选择最小的一个数与第一个位置的数交换。然后在剩余的数中找出最小的数与第二位的数交换,以此类推,直到倒数第二个数与最后一个数比较。代码实现:functionselectSort($arr){//双循环完成,外层控制轮数,内层控制比较次数$len=count($arr);for($i=0;$i<$len-1;$i++){//假设最小值在前的位置$p=$i;for($j=$i+1;$j<$len;$j++){//$arr[$p]为当前已知的最小值if($arr[$p]>$arr[$j]){//比较,找到较小的,记录最小值的位置;并使用已知的最小值进行下一次比较Compare。$p=$j;}}//当前最小值的位置已经确定,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则可以调换位置。如果($p!=$i){$tmp=$arr[$p];$arr[$p]=$arr[$i];$arr[$i]=$tmp;}}//returnfinalResultreturn$arr;}3、插入排序思路分析:在一组待排序的数中,假设前面的数已经有序,现在我们需要将第n个数插入到前面的数中有序的数字,这样这n个数字也是有序排列的。重复这个循环,直到所有的都按顺序排列。代码实现:functioninsertSort($arr){$len=count($arr);对于($i=1,$i<$len;$i++){$tmp=$arr[$i];//内层循环控制,比较插入for($j=$i-1;$j>=0;$j--){if($tmp<$arr[$j]){//发现插入的元素较小,交换位置,将后面的元素和前面的元素交换$arr[$j+1]=$arr[$j];$arr[$j]=$tmp;}else{//如果遇到的元素就不用移动了,因为已经排好序了,而且是数组,前面的就不用再比较了。休息;}}}return$arr;}4.快速排序思路分析:选择一个参考元素,一般是第一个元素或者最后一个元素。通过一次扫描,将待排序列分为两部分,一部分小于参考元素,一部分大于等于参考元素。此时参考元素在排序后处于正确的位置,然后用同样的方法对被划分的两个部分进行递归排序。代码实现:functionquickSort($arr){//先判断是否继续$length=count($arr);如果($length<=1){返回$arr;}//选择第一个元素作为基准$base_num=$arr[0];//遍历除标尺外的所有元素,按照大小关系放入两个数组//初始化两个数组$left_array=array();//$right_array=比基数小的数组();//大于基数for($i=1;$i<$length;$i++){if($base_num>$arr[$i]){//放入左数组$left_array[]=$arr[$我];}else{//放在右边$right_array[]=$arr[$i];}}//递归调用这个函数$left_array分别对左右数组进行相同的排序过程=quick_sort($left_array);$right_array=quick_sort($right_array);//Mergereturnarray_merge($left_array,array($base_num),$right_array);}以上内容希望对大家有所帮助,很多PHPer再高级总会遇到一些问题和瓶颈。业务代码写多了,没有方向感。我不知道从哪里开始改进。为此,我整理了一些PHP进阶、架构视频资料和大厂PHP面试PDF|公众号:PHP开源社区
