说到排序,相信作为一个程序员那是必须要了解和最基本的东西,之前在学java的时候就已经领略到了排序的魅力,而在php中的排序无非也是那么几种,所以在这里分享给大家,当然,我在这里都已经整合成函数的形式,所以大家如果有在使用的,可以直接调用就行了,非常的方便。
冒泡排序
//冒泡排序法
function arrMao(&$arr){
$temp = 0 ;
for($i=0;$i<count($arr)-1;$i++){
for($j=0;$j<count($arr)-1-$i;$j++){
if($arr[$j]>$arr[$j+1]){
$temp = $arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
}
}
}
return $arr;
}
选择排序
选择排序比冒泡排序在效率上要高,这个已经测试过了的,代码如下:
//选择排序法
function arrXuan(&$arr){
for($i=0;$i<=count($arr)-1;$i++){
for($j=$i+1;$j<count($arr);$j++){
if($arr[$i]>$arr[$j]){
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
}
}
}
return $arr;
}
插入排序
对于插入排序比之前的两种排序方法的效率要高的。
它的基本思想是:把n个待排序的元素看成为一个有序表和一个无需表,开始时有序表中只包含一个元素,无需表中包含有n-1个元素,排序过程中每次从无需表中取出第一个元素,把它的排序码一次雨有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
代码如下:
function arrCha(&$arr){
for($i=1;$i<count($arr);$i++){
$insertVal = $arr[$i];
$insertIndex = $i-1;
while($insertIndex>=0&&$insertVal<$arr[$insertIndex]){
$arr[$insertIndex+1]=$arr[$insertIndex];
$insertIndex--;
}
$arr[$insertIndex+1]=$insertVal;
}
return $arr;
}
快速排序
快速排序法是最难的一种,但是它的效率当然也是最高的,20W的数据可以在2秒钟内搞定,这就是效率,当然了,在一瞬间你的内存也会吃紧的。
代码如下:
function arrKuai($left,$right,&$arr){
$l = $left;
$r = $right;
$pivot = $arr[($left+$right)/2];
$temp = 0;
while($l<$r){
while($arr[$l]<$pivot) $l++;
while($arr[$r]>$pivot) $r--;
if($l>=$r) break;
$temp = $arr[$l];
$arr[$l] = $arr[$r];
$arr[$r] = $temp;
}
if($l==$r){
$l++;
$r--;
}
if($left<$r) arrKuai($left,$r,$arr);
if($right>$l) arrKuai($l,$right,$arr);
return $arr;
}
总结
无论你是使用哪种,关键是你了解这些方法的基本思想原理就可以了。
智言个人博客






评论前必须登录!
注册