当前位置: 首页 > 后端技术 > PHP

PHP实现了4种排序算法

时间:2023-03-30 05:37:56 PHP

冒泡排序对于一个长度为N的数组,我们需要排序N-1轮,每i轮比较N-i次。为此,我们可以使用双循环语句,外循环控制循环的轮数,内循环控制每一轮的比较次数。$arr=[2,3,1,8,4,5];$length=count($arr);for($i=0;$i<$length;$i++){for($j=0;$j<$i-1;$j++){如果($arr[$i]>$arr[$j]){$tmp=$arr[$j];$arr[$j]=$arr[$i];$arr[$i]=$tmp;}}}for($i=0;$i<$length-1;$i++){echo'i:'.$我。'';对于($j=0;$j<$length-1-$i;$j++){echo'j:'.$j.'';如果($arr[$j]>$arr[$j+1]){$tmp=$arr[$j];$arr[$j]=$arr[$j+1];$arr[$j+1]=$tmp;print_r($arr);}}echo"\n";}print_r($arr);每轮选择排序可以确定一个位置。对于N个数,比较N-1轮可以确定N个位置的数,因为确定了N-1个位置,最后确定了A个位置for($i=0;$i<$count-1;$i++){//定义最小位置$minIndex=$i;for($j=$i+1;$j<$count;$j++){if($arr[$j]<$arr[$minIndex]){$minIndex=$j;}}if($i!=$minIndex){$temp=$arr[$i];$arr[$i]=$arr[$m在索引];$arr[$minIndex]=$temp;}}快速排序1.从序列中取出一个数作为参考数2.在划分的过程中,将所有大于这个数的数放在它的右边,小于或等于它的所有数放在它的右边left3.左右区间重复第二步,直到每个区间只有一个数functionquick_sort($arr){if(empty($arr)){return$arr;}$length=count($arr);如果($length==1){返回$arr;}//设置第一个值作为基值$base=$arr[0];$左=$右=[];for($i=1;$i<$length;$i++){如果($base<$arr[$i]){$left[]=$arr[$i];}else{$right[]=$arr[$i];}}//递归调用$left=quick_sort($left);$right=quick_sort($right);返回array_merge($left,[$base],$right);}insertionsort插入排序,我的理解是在两层循环下逐渐增加排序的次数,反复比较,直到得到最终的排序结果,和我最初的比较排序思路基本一致.functioninsert_sort($arr){//区分哪一部分已经排序//哪一部分没有排序//找到一个需要排序的元素//这个元素从第二个元素开始,最后一个元素是需要排序的元素//使用loop可以标出来//iloop控制每次需要插入的元素,一旦需要插入的元素被控制,//间接的,数组被分成了2部分,下标比当前的小(左边那个),是一个排序好的序列for($i=1,$len=count($arr);$i<$len;$i++){//获取当前需要比较的元素值$tmp=$arr[$i];//内层循环控制比较和插入for($j=$i-1;$j>=0;$j--){//$arr[$i];//要插入的元素;$arr[$j];//要比较的元素if($tmp<$arr[$j]){//找到要插入的元素要小,交换位置//将后面的元素和里面的元素交换前$arr[$j+1]=$arr[$j];//设置前面的数字为当前需要兑换的数字$arr[$j]=$tmp;}else{//如果遇到不需要移动的元素//因为是已经排序好的数组,前面的不需要再进行比较。休息;}}}//将这个元素插入到排序序列中。//返回$arr;}