C++ 随机洗牌操作

C++ 随机洗牌操作,c++,C++,我有以下代码 #include <iostream> #include <cstdlib> using namespace std; int main() { int a[] = {2, 1, 4, 3, 5, 6, 7, 9, 8, 10, 11}; int n = sizeof(a) / sizeof(int); int k=0; for (int i = 0; i < n; i++) { k

我有以下代码

#include <iostream>
#include <cstdlib>
using namespace std;


int main()
{    
    int a[] = {2, 1, 4, 3, 5, 6, 7, 9, 8, 10, 11};
    int n = sizeof(a) / sizeof(int);
    int k=0;

    for (int i = 0; i < n; i++)
    {
        k = i + rand() % (n-1-i);
        int s = a[i];
        a[i] = a[k];
        a[k] = s;     
    }

    for (int i = 0; i < n; i++)
    {     
        cout << a[i] << "  " << endl;
    }

    return 0;
}
#包括
#包括
使用名称空间std;
int main()
{    
INTA[]={2,1,4,3,5,6,7,9,8,10,11};
int n=sizeof(a)/sizeof(int);
int k=0;
对于(int i=0;i我想如果
I
(比如I==n-1),
rand()%(n-1-I)
会给你一些值除以零。

你可能想问问自己
%(n-1-I)
对于
I
n=11的所有可能值的结果是什么。当I=10时,这是k=I+rand()%0

Mod by zero是未定义的,可以以多种不同的方式操作。我见过它与Mod相当
无穷大,所以它将返回i作为i+RAND(),这会导致你的越界错误。< /P>可能在数组中的索引范围内,在k= i+RAND()中(n-1)i是的,我已经看到,RAND()% 0因为除以0而不能工作。@用户-SIDNEOTE: C++算法头已经有了一个函数。