说到排序,相信作为一个程序员那是必须要了解和最基本的东西,之前在学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; }
总结
无论你是使用哪种,关键是你了解这些方法的基本思想原理就可以了。
评论前必须登录!
注册