当前位置: 首页 > 科技观察

PHP中四种基本排序算法的代码实现

时间:2023-03-13 02:43:35 科技观察

很多人都说算法是程序的核心,算法的好坏决定了程序的好坏。作为一个初级phper,虽然很少接触算法的东西。但是基本的排序算法还是要掌握的,它是程序开发必不可少的工具。下面介绍冒泡排序、插入排序、选择排序和快速排序四种基本算法,并对算法思想进行分析。前提:使用冒泡排序、快速排序、选择排序、插入排序对下面数组中的值进行升序排序。$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);functionbubbleSort($arr){$len=count($arr);//这一层循环控制需要冒泡的轮数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;}}}return$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]){//比较,找到较小的,记录最小值的位置;并在下次比较时使用已知的最小值进行比较。$p=$j;}}//当前最小值的位置已经确定,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则可以调换位置。if($p!=$i){$tmp=$arr[$p];$arr[$p]=$arr[$i];$arr[$i]=$tmp;}}//返回最终结果结果返回$arr;}#p#3。插入排序思路分析:在一组待排序的数中,假设前面的数已经排好序,现在我们需要把第n个数插入前面排好序的数中,使得这n个数也排好序。重复这个循环,直到所有的都按顺序排列。functioninsertSort($arr){$len=count($arr);for($i=1,$i<$len;$i++){$tmp=$arr[$i];//内循环控制,比较与insertfor($j=$i-1;$j>=0;$j--){if($tmp<$arr[$j]){//发现插入的元素较小,交换position,andput后??面的元素和前面的元素交换$arr[$j+1]=$arr[$j];$arr[$j]=$tmp;}else{//如果遇到一个元素不需要移动,因为如果是已经排好序的数组,前面的就不需要再对比了。打破;}}}返回$arr;}4。快速排序思路分析:选择一个参考元素,通常是选择第一个元素或者最后一个元素。通过一次扫描,将待排序列分为两部分,一部分小于参考元素,一部分大于等于参考元素。此时参考元素在排序后处于正确的位置,然后用同样的方法对被划分的两个部分进行递归排序。functionquickSort($arr){//先判断是否继续$length=count($arr);if($length<=1){return$arr;}//选择***元素作为基准$base_num=$arr[0];//遍历除标尺外的所有元素,按照大小关系放入两个数组//初始化两个数组$left_array=array();//$right_array=array()小于benchmark//大于基数for($i=1;$i<$length;$i++){if($base_num>$arr[$i]){//放入左数组$left_array[]=$arr[$i];}else{//放在右边$right_array[]=$arr[$i];}}//递归调用这个函数$left_array=quick_sort($left_array);$right_array=quick_sort($right_array);//合并returnarray_merge($left_array,array($base_num),$right_array);}