Jul
26
遇到一个问题:
有一个数组,其中每个元素都包含time和content两个子元素,需要按time字段排序。
记得以前是搞过这个东西的,有个专门的函数,貌似就是array_multisort来搞。
查了一下mannual,发现例子实在太晦涩,看起来很不爽。
于是干脆自己实现一个,只需要提供一个排序函数即可。
效率可能低一些,但是用起来舒服多了。。
转载请注明出自 ,如是转载文则注明原出处,谢谢:)
RSS订阅地址: https://www.felix021.com/blog/feed.php 。
有一个数组,其中每个元素都包含time和content两个子元素,需要按time字段排序。
记得以前是搞过这个东西的,有个专门的函数,貌似就是array_multisort来搞。
查了一下mannual,发现例子实在太晦涩,看起来很不爽。
于是干脆自己实现一个,只需要提供一个排序函数即可。
效率可能低一些,但是用起来舒服多了。。
//调用例子(cmp函数可以自己重写):
mysort($array_name, 0, count($array_name) - 1, cmp);
function cmp($i, $j){
return $i['time'] < $j['time'];
}
function mysort(&$arr, $s, $e, $func){
$i = $s; $j = $e; $tmp = $arr[$s];
if($s < $e){
while($i != $j){
while($i < $j && $func($tmp, $arr[$j])) $j--;
if($i < $j){
$arr[$i] = $arr[$j];
$i++;
}
while($i < $j && $func($arr[$i], $tmp)) $i++;
if($i < $j){
$arr[$j] = $arr[$i];
$j--;
}
}
$arr[$i] = $tmp;
mysort($arr, $s, $i-1, $func);
mysort($arr, $i+1, $e, $func);
}
}
mysort($array_name, 0, count($array_name) - 1, cmp);
function cmp($i, $j){
return $i['time'] < $j['time'];
}
function mysort(&$arr, $s, $e, $func){
$i = $s; $j = $e; $tmp = $arr[$s];
if($s < $e){
while($i != $j){
while($i < $j && $func($tmp, $arr[$j])) $j--;
if($i < $j){
$arr[$i] = $arr[$j];
$i++;
}
while($i < $j && $func($arr[$i], $tmp)) $i++;
if($i < $j){
$arr[$j] = $arr[$i];
$j--;
}
}
$arr[$i] = $tmp;
mysort($arr, $s, $i-1, $func);
mysort($arr, $i+1, $e, $func);
}
}
欢迎扫码关注:
转载请注明出自 ,如是转载文则注明原出处,谢谢:)
RSS订阅地址: https://www.felix021.com/blog/feed.php 。
boluor
2009-7-28 12:01
又见快排…
felix021 回复于 2009-7-28 12:04
嗯,懒得加随机化了
ivan
2009-7-26 22:17
这个~用std::sort很方便……
felix021 回复于 2009-7-26 22:18
可惜php里面没有std这个东西。。。
分页: 1/1 1