2011-09-19 49 views
0

我有以下代码随机整理操作

#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; 
} 

,但它给了我运行时错误,我知道有很多互联网的方法,只是我选择这样简单的一个大学考试准备,请大家帮我一下是错的?

+0

**是什么错误?** –

+1

可能索引出阵列的边界在k = i + rand()%(n-1-i) –

+0

是的,我已经看到,rand()%0不起作用,因为被零除。 –

回答

0

n = 11。当i = 10时,这是一个k = i + rand()%0;

零点模式是未定义的,可以运行多种不同的方式。我已经看到它相当于mod infinity,所以它会返回k作为i + rand(),这会导致你的越界错误。

1

我认为rand()%(n-1-i)会给你一个零除以某些值如果i(如i == n-1)。

1

您可能想问自己%(n-1-i)的结果将会是i的所有可能值的结果。