【算法】随机打乱数组顺序

353 阅读1分钟

引言

给你一个数组,比如 arr = [1,3,5,7,9,10],要求随机输出这个数组,怎么搞?

以下都是PHP代码

思路

取一个基准元素,一般是最后一个元素,先用mt_rand生成0到length-1(数组长度)的索引值,用其值和基准元素进行交换,然后length--,直到最后一个元素。

代码示例

$arr = [1, 3, 5, 7, 10];
function _shuffle($arr)
{
 $length = count($arr) - 1;
 while ($length > 1) {
 $index = mt_rand(0, $length - 1);
 $tmp = $arr[$length];
 $arr[$length] = $arr[$index];
 $arr[$index] = $tmp;
 $length--;
 }
 return $arr;
}
var_dump(_shuffle($arr));

时间复杂度:O(N)

end 个人公众号:技术源区

欢迎扫描下图关注公众号:技术源区,分享一些有深度的文章!