需要动画排序算法,用源代码逐行可视化。
介绍:
首先,有一个表格(见附图)。在该表单的顶部显示了一个动态创建的 Edit 组件数组,其中包含要排序的数组。在下方,右侧放置了一个包含算法的备忘录组件。在该算法的每一行的左侧,都放置了一个标签,表示算法中的行号。
这个想法是通过为该标签着色来突出显示线条,此时执行在哪里。单击“开始”按钮时开始排序。它的动作如下:
int n = 10;
bool swapped = true; hl(1);
int j = 0; hl(2);
int tmp; hl(3);
while (swapped) { hl(4);
swapped = false; hl(5);
j++; hl(6);
for (int i = 0; i < n - j; i++) { hl(7);
if (arr[i] > arr[i + 1]) { hl(8);
tmp = arr[i]; hl(9);
arr[i] = arr[i + 1]; hl(10);
arr[i + 1] = tmp; hl(11);
swapped = true; hl(12);
} hl(13);
} hl(14);
} hl(15);
hl函数必须使用 Sleep() 函数为标签着色并暂停执行
void TForm2::hl(int l)
{
for (int i = 0; i < 24; i++) {
Form2->lines[i]->Font->Color = clGray;
}
Form2->lines[l-1]->Font->Color = clRed;
Sleep(300);
}
问题:
代码执行正在暂停(睡眠功能正常工作),但标签仍然是灰色的,没有可见的变化,除了最后一个,当事件结束时。第 15 行是红色的。
问题:
谁能告诉我,我错在哪里,以及如何做对?