我的程序从任意索引开始循环遍历列表。这两种方法中哪一种是最有效的方法?
void example(int list[], unsigned int length, unsigned int start) {
unsigned int i;
for (i = 0; i < length; i ++) {
printf("%d\n", list[(start + i) % length]);
}
或
void example(int list[], unsigned int length, unsigned int start) {
unsigned int i;
i = start;
do {
printf("%d\n", list[i]);
i += 1;
if (i == length) i = 0;
} while (i != start); /* fails the first time because i increments before the check */
}
最快的很可能是这样的:
for(i=start; i<length; i++) {
...
}
for(i=0; i<start; i++) {
...
}
而且,对
printf
的调用可能是问题所在,因此可能加快速度的一件事是构建一个缓冲区,然后一次打印所有内容。
但是,在做任何事情之前,请确保这实际上是一个瓶颈。