【发布时间】:2021-01-03 04:13:53
【问题描述】:
有没有更快(或更清洁)的算法来加入气泡,如下所示?
上面的动画示例描述了关闭 8 个气泡之间的 4 个任意间隙。
我想出了这个丑陋的代码,它需要一个arrayK 气泡之间间隙的索引(这个数组保证被排序并且长度为K),“加入”N 气泡并输出连接气泡的长度。
它有效,但我对它不满意。在给定相同的输入时,是否有更快和/或更简洁的代码输出相同的数据?
void JoinBubbles(const unsigned int* const arrayK, unsigned int K, unsigned int N)
{ //ArrayK is of size K and is sorted. Obviously K must be less than N and all elements of the array must be less than N-2.
unsigned int h, i, j;
for (i = 0; i < arrayK[0]; i++)
printf("1.");
for (h = 0; h < K; h++)
{
for (i = h + 1; (i < K) && (arrayK[i - 1] == arrayK[i] - 1); i++);
printf("%d,", i - h + 1);
for (j = arrayK[i - 1] + 2; (i < K) && (j < arrayK[i]); j++)
printf("1.");
h = i - 1;
}
for (j = arrayK[K - 1] + 2; (j < N + 1); j++)
printf("1,");
printf("\n");
}
【问题讨论】:
标签: c