用c生成一个0-8无重复数字的随机数组的比较高效的算法解决办法

用c生成一个0-8无重复数字的随机数组的比较高效的算法
我的代码是这样的:
C/C++ code
int CreatMatrix(int *matrix)
{
    int i,j;
    int buf;
    for(i=0;i<9;i++)
    {
        getElem:
        srand((unsigned)time(NULL));
        buf=rand()%9;
        for(j=0;j<i;j++)
        {
            if(matrix[j]==buf)
            goto getElem;
        }
        matrix[i]=buf;
    }
    return OK;
}

但是上面的代码要花10秒钟才能执行完,我想找一个比较高效点的算法

------解决方案--------------------
这样的算法重复的无谓计算太多。时间消耗就大,

if(matrix[j]==buf)
这里如果相等的时候,就把(buff+1) % 9,或者做其他的计算,填到别的空去
------解决方案--------------------
生成随机排列可以用Floyd算法。为代码如下:

for I := M downto 2 do
J := RandInt(1, I)
Swap(X[J], X[I])

原理请参考《编程珠玑II》第十三章 绝妙的取样。
------解决方案--------------------
b[0~8]=0
if(b[a[x]]==0)
b[a[x]]=1;
else
继续随机
直到 b[0~8]==1

欢迎加入QQ群
26406124
------解决方案--------------------
写个函数替换之前的代码:

#pragma warning(disable:4786)
#include <vector>

#define N 9

void SrandArray(int *a , int num)
{
vector<int> vecInt;

for(int i=0 ; i<num ; ++i)
{
vecInt.push_back(i);
}

srand(unsigned(time(NULL)));

for(int j=0 ; j<num ; ++j)
{
int index = rand() % vecInt.size();
a[j] = vecInt[index];
vecInt.erase(vecInt.begin() + index);
}
}