一个时间O(n)的洗牌算法

Posted yocichen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个时间O(n)的洗牌算法相关的知识,希望对你有一定的参考价值。

 1 //一种O(n)的洗牌算法
 2 vector<int> randNUms(vector<int> &nums, int m)
 3 
 4     int len = nums.size();
 5     if (len < m)
 6         return ;
 7 
 8     vector<int> res;
 9     for (int i = len - 1; i >= 0, m-- > 0; i--)
10     
11         int r = rand() % i;
12         res.push_back(nums[r]);
13         int tmp = nums[r];
14         nums[r] = nums[i];
15         nums[i] = tmp;
16     
17     return res;
18 

时间O(n),空间O(1).

以上是关于一个时间O(n)的洗牌算法的主要内容,如果未能解决你的问题,请参考以下文章

游戏常用算法-洗牌算法

洗牌算法

洗牌算法浅试

洗牌算法分析

洗牌问题

洗牌问题