首先把此问题抽象成得到一个0~N的随机顺序数组
此算法思路为:
每次随机出一个整数作为被抽出的位置 ,再将对应位置的数抽出,然后将该数与数组中最后的元素相交换;然后缩小选取数组的范围,去掉最后的元素,直到数组剩余一个元素的时候结束。
实现代码如下:
void Poker(int* array, int l)
{
int i = l; //数组长度length
if (i == 0) return;
while (--i)
{
int j = rand() % (i+1);
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}