- 工作中遇到排序需求,不能数据库排,我就代码排序了。
$startTime = microtime(true); $len = count($list); for ($i=0;$i<$len-1;$i++){//选择排序,时间复杂度O(n^2) $maxIndex = $i;//最大下标 for ($j=$i+1;$j<$len;$j++){//循环未排定部分 if ($list[$j]->todayFriendSum > $list[$maxIndex]->todayFriendSum){//如果大于改字段 $maxIndex = $j; } } list($list[$maxIndex],$list[$i]) = array($list[$i],$list[$maxIndex]); } $endTime = microtime(true); dump($startTime); dump($endTime); dump(bcsub($endTime,$startTime,7));
其实很简单,就是嵌套循环两次。拿排过的最后一位元素,和没排过所有元素进行对比,如果最大就替换位置。就是所谓交换变量。
go里面很方便交换变量 a,b = b,c;
php里面也有不用第三方临时变量方式交换变量。
list(a,b) = array(b,a);
list()不是一个函数,是一个语言结构。作用是批量赋值。
我以我目前的见解,就是这个排序虽然不是最优解,但是还不错,挺简单。每次循环的次数 都是逐渐-1的。
原创文章,作者:星辰,如若转载,请注明出处:http://www.z88j.com/106.html
评论列表(1条)
[…] 这么简单的算法之前写过思路,这次是复习一遍。如果看思路:https://www.z88j.com/106.html (这个是php版本的 不过算法和语言没多大关系)值得注意的是 c++ swap 实际性能并没有 普通的变量交换性能高。好像是因为泛型 要进行类型判断。c++选择排序代码: […]