Как показать, какая строка сортируется, изменив цвет на красный? - PullRequest
1 голос
/ 13 мая 2019

Я завершил визуализацию сортировки пузырьков в процессе обработки. Следующим шагом для меня будет желание увидеть, какая строка сортируется, изменив ее цвет на красный. Я не уверен, как это сделать, любое понимание будет полезно.

Я попытался добавить штрих в середине алгоритма переключения, а также поместить его в алгоритм, который тоже проверяет значения, но не сработало.

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;
}

Сейчас это рабочий код без изменения цвета на красный, я включил полную программу, чтобы вы могли попробовать ее самостоятельно и посмотреть, сможете ли вы помочь изменить одну строку, которая перемещается и заменяется на красную.

1 Ответ

2 голосов
/ 13 мая 2019

Используйте 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]);
    }
}
...