Чтобы визуализировать сортировку, нам нужно рисовать с интервалами во время сортировки.Здесь я добавил переменную глубины, чтобы я мог контролировать, как далеко идет сортировка.Каждый раз, когда ничья называется, я увеличиваю глубину, чтобы мы могли видеть прогресс.
var values = [];
var numLines = 500;
function setup() {
createCanvas(900, 600);
colorMode(HSB, height);
for (i = 0; i < numLines; i++) {
values[i] = (round(random(height)));
}
frameRate(1);
}
var depth = 1;
function draw() {
background(51);
values = mergeSort(values, depth);
depth++;
for (i = 0; i < values.length; i++) {
let col = color(values[i], height, height);
stroke(col);
fill(col);
var location = map(i, 0, values.length, 0, width);
rect(location, height - values[i], width/numLines, height);
}
if (depth > 10){
noLoop();
}
}
function mergeSort(a, d) {
if (a.length <= 1) {
return a;
}
d--;
if (d < 1){
return a;
}
var mid = Math.round((a.length / 2));
var left = a.slice(0, mid);
var right = a.slice(mid);
return merge(mergeSort(left,d), mergeSort(right, d));
}
function merge(left, right) {
sorted = [];
while (left && left.length > 0 && right && right.length > 0) {
if (left[0] <= right[0]) {
sorted.push(left.shift());
}
else {
sorted.push(right.shift());
}
}
return sorted.concat(left, right);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.2/p5.min.js"></script>