php自己实现排序算法和usort性能能差多少
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秒。
以上文章来自网友 楚天乐的小站 (需自备梯子)版权归作者所有,本站仅转发整理。
页:
[1]