我制作的这款游戏目前在App Store上名为“Twinstones”,并且有一个“石头”选择商店页面,允许您选择您想玩的石头组(60种选择)。
我编写了一个随机函数,使石头选项位于不同用户的不同列行位置。就Big-O约束而言,我的函数在对数尺度上被认为是线性的吗?或者,如果输入10000而不是60,会增加超出合理手段的时间吗?我对这个时间管理代码世界很陌生,所以请耐心等待:
#define STONES 60
- (void)randomizeStones {
srand((unsigned int)time(NULL));
char stone[STONES];
char tester[STONES] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,
39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,
57,58,59};
int tracker = STONES;
for (int i = 0; i < STONES; i++) {
int r = rand() % tracker;
stone[i] = tester[r];
tester[r] = ' ';
for (int j = r; j < tracker; j++) {
tester[j] = tester[j+1];
tester[j+1] = ' ';
}
tracker--;
}
// print out Stones order to verify (this function works just to throw that in there)
}
tester
数组“转移”到stone
数组的第一个元素。tester
中的索引位置删除该号码。for
循环使索引中的值大于所选索引,并以tester
数组顺序将它们“移动”到左侧。tracker
减1,以防止第二个for
循环不断运行60次。这个过程的效率如何(假设我希望n个Stones可以独立随机化,而无需随机选择并继续查找唯一值)?