我已经完成了气泡排序过程的可视化。我自己的下一个步骤是希望能够通过将其颜色更改为红色来查看正在排序的行。我不确定该怎么做,任何见解都会有所帮助。
我尝试将笔画添加到switch算法的中间,并将其放入也可以检查值的算法中,但这两个都不起作用。
float[] lines;
int i = 0;
int j = 0;
void setup() {
//fullScreen(P2D);
size(800,500);
//get array of x values
lines = new float[width];
float len = lines.length;
//populate each x value with a random y value
for (int i = 0; i < len; i++) {
lines[i] = random(height);
}
}
void draw() {
background(0);
float len = lines.length;
//do this for the entire array
if (i < len) {
for (j = 0; j < len-i-1; j++) {
float a = lines[j];
float b = lines[j + 1];
if (a > b) {
swap(lines, j, j+1);
}
}
} else {
noLoop();
i++;
}
for (int i = 0; i < len; i++) {
stroke(255);
line(i, height, i, height - lines[i]);
}
}
void swap(float[] arr, int a, int b) {
float temp;
temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
这是现在的工作代码,没有将颜色更改为红色,我提供了完整的程序,因此您可以自己尝试一下,看看是否可以帮助更改正在移动并交换为红色的单行。
答案 0 :(得分:2)
使用IntList
来收集已交换的行的索引:
例如
IntList swapped = new IntList();
if (a > b) {
swapped.append(j);
swapped.append(j+1);
swap(lines, j, j+1);
}
如果列表中包含行的索引,则以另一种颜色绘制该行:
例如
for (int i = 0; i < len; i++) {
if ( swapped.hasValue(i) )
stroke(255, 0, 0);
else
stroke(255);
line(i, height, i, height - lines[i]);
}
函数draw
可能看起来像这样:
void draw() {
background(0);
IntList swapped = new IntList();
float len = lines.length;
//do this for the entire array
if (i < len) {
for (j = 0; j < len-i-1; j++) {
float a = lines[j];
float b = lines[j + 1];
if (a > b) {
swapped.append(j);
swapped.append(j+1);
swap(lines, j, j+1);
}
}
} else {
noLoop();
i++;
}
for (int i = 0; i < len; i++) {
if ( swapped.hasValue(i) )
stroke(255, 0, 0);
else
stroke(255);
line(i, height, i, height - lines[i]);
}
}