php四种排序,PHP四种排序

这篇博客通过实际运行时间展示了PHP中的冒泡排序、选择排序、插入排序和快速排序的性能差异。实验结果显示,快速排序在处理大量数据时效率最高,而冒泡排序和选择排序的效率较低。插入排序在小规模数据上表现良好。文章提供了详细的排序算法实现代码,有助于理解这些排序方法的工作原理。
摘要由CSDN通过智能技术生成

ini_set("error_reporting","E_ALL & ~E_NOTICE");

/*

* PHP各类排序算法总结

*/

$arr = array();

$bubblearr = array();

$selectarr = array();

for($i = 0;$i<2000;$i++){

$arr[$i]=rand(1,9999999);

}

/*

* bubble_sort_start0.54549100 1469071764

bubble_sort_end0.92051200 1469071764

selectarr_sort_start0.92051200 1469071764

selectarr_sort_end0.11352300 1469071765

insortarr_sort_start0.11352300 1469071765

insortarrr_sort_end0.32253500 1469071765

quicksortarr_sort_start0.32253500 1469071765

quicksortarrr_sort_end0.33253600 1469071765

*/

echo 'bubble_sort_start'.microtime().'
';

bubbleSort($arr);

echo 'bubble_sort_end'.microtime().'
';

echo 'selectarr_sort_start'.microtime().'
';

slelectSort($arr);

echo 'selectarr_sort_end'.microtime().'
';

echo 'insortarr_sort_start'.microtime().'
';

insertSort($arr);

echo 'insortarrr_sort_end'.microtime().'
';

echo 'quicksortarr_sort_start'.microtime().'
';

quickSort($arr);

echo 'quicksortarrr_sort_end'.microtime().'
';

//冒泡排序

function bubbleSort($arr){

$len = count($arr);

for($i=0;$i

for($j=0;$j

if($arr[$j]>$arr[$j+1]){

$tmp = $arr[$j+1];

$arr[$j+1] = $arr[$j];

$arr[$j] =$tmp;

}

}

}

return $arr;

}

//选择排序

//第一轮能把最大的选出来放在第一个位置,第二轮选出来第二个

//思路在于假定一个flag也就是第一个为最小的,然后找他后面的,如果比他小就跟他替换掉,以此类推

function slelectSort($arr){

//实现思路 双重循环排序,外层控制轮数,当前的最小值

//$i为当前最小值的位置,需要参与比较的元素

$len = count($arr);

for($i=0;$i

//先假设最小值的位置

$p = $i;

//$j 当前都需要和哪些元素比较,$i后边的

for($j=$i+1;$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;

}

}

return $arr;

}

//插入排序

function insertSort($arr){

//区分 哪部分是已经排序好的

//哪部分是没有排序的

//找到其中一个需要排序的元素

//这个元素 就是从第二个元素开始,到最后一个元素都是这个需要排序的元素

//利用循环就可以标志出来

//i循环控制 每次需要插入的元素,一旦需要插入的元素控制好了,

//间接已经将数组分成了2部分,下标小于当前的(左边的),是排序好的序列

$len = count($arr);

for($i=0;$i

//获得当前需要比较的元素的值

$tmp = $arr[$i];

//内层循环控制比较并且插入

for($j=$i-1;$j>=0;$j--){

//$arr[$i];//需要插入的元素; $arr[$j];//需要比较的元素

if($tmp

//发现插入的元素要小,交换位置

//后边的元素与前面的元素互换。

$arr[$j+1] = $arr[$j];

$arr[$j] = $tmp;

}else{

//如果碰到不需要移动的

//由于是已经排号的,则前面就不需要在排序了

break;

}

}

}

return $arr;

}

//快速排序

function quickSort($arr){

$len = count($arr);

if($len <= 1){

return $arr;

}

//选择一个flag

$flag = $arr[0];

//遍历 除了flag之外的所有元素,按照大小关系放入两个数组内

$left = array();

$right = array();

//初始化两个数组一个小于的一个大于的

for($i=1;$i

if($flag > $arr[$i]){

//放入左边数组

$left[] = $arr[$i];

}else{

//放入右边数组

$right[] = $arr[$i];

}

}

//在分别对左边和右边的数组进行相同的排序处理方式

//递归调用这个函数

$left = quickSort($left);

$right = quickSort($right);

//合并左边,标尺,右边

return array_merge($left,$flag,$right);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值