|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
php自己实现排序算法和usort性能能差多少
排序要求:
假设我们有一大堆数据库记录,每条记录包含"a","b","c","d"四个字段。我们需要根据"a"字段的字符长度来进行降续排列。
生成随机数据库记录- //生成随机字符串
- function RandomString($length)
- {
- $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
- $randstring = '';
- for ($i = 0; $i < $length; $i++) {
- $pos = rand(0, strlen($characters) - 1);
- $randstring .= $characters[$pos];
- }
- return $randstring;
- }
- //生成对象数据
- function generate_random_objects($keys, $quantity){
- $objects = [];
- for($i=0; $i < $quantity; $i++){
- $obj = [];
- for($j=0; $j < count($keys); $j++){
- $length = rand(0, 100);
- $str = RandomString($length);
- $obj[$keys[$j]] = $str;
- }
- $objects[] = $obj;
- }
- return $objects;
- }
复制代码
第一种排序采用php编写冒泡排序- function method1($objects){
- $count = count($objects);
- for($i = 0; $i < $count; $i++){
- for($j = $count-1; $j > $i; $j--){
- if(strlen($objects[$j]['a']) > strlen($objects[$j-1]['a'])){
- $temp = $objects[$j];
- $objects[$j] = $objects[$j-1];
- $objects[$j-1] = $temp;
- }
- }
- }
- }
复制代码
第二种排序使用usort函数实现- function method2($objects){
- usort($objects,function($a, $b){
- return strlen($a['a']) > strlen($b['a']);
- });
- }
复制代码
测试代码- function test($quantity){
- echo $quantity . "规模测试\n";
- // 生成随机对象1000个
- $objects = generate_random_objects(["a", "b", "c", "d"], $quantity);
- $stime=microtime(true);
- method1($objects);
- $etime=microtime(true);
- $total1 = $etime-$stime;
- echo "自定义排序耗时: " .$total1 . "\n";
- $stime=microtime(true);
- method2($objects);
- $etime=microtime(true);
- $total2 = $etime-$stime;
- echo "usort排序耗时: " . $total2 . "\n";
- }
- test(1000);
- test(5000);
- test(10000);
- test(50000);
复制代码
实验结果
上图吧,图中运行时间单位为秒
到50000数据规模的时候,自己的排序代码已经逆天了,477秒。
以上文章来自网友 楚天乐的小站 (需自备梯子)版权归作者所有,本站仅转发整理。
|
|