You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
2.7 KiB
JavaScript

// Strict Mode
"use strict";
// Bars
const bars = document.querySelectorAll("div");
// Generate Random Number Data
function GenerateRandomNumberData () {
const randomNumberData = [];
for (let dataNumber = 0; dataNumber < 100; dataNumber++) {
randomNumberData.push(Math.floor(Math.random() * 100));
};
return randomNumberData;
};
// Set Bar Heights
function SetBarHeights ( randomNumberData, activeBar ) {
for (let barNumber = 0; barNumber < 100; barNumber++) {
if (barNumber == activeBar) {
bars[barNumber].setAttribute("style", "height: @vh; background-color: blue;".replace("@", randomNumberData[barNumber]));
} else {
bars[barNumber].setAttribute("style", "height: @vh; background-color: red;".replace("@", randomNumberData[barNumber]));
}
};
};
// Set Bar Heights Red
function SetBarHeightsr ( randomNumberData, activeBar ) {
for (let barNumber = 0; barNumber < 100; barNumber++) {
bars[barNumber].setAttribute("style", "height: @vh; background-color: red;".replace("@", randomNumberData[barNumber]));
};
};
// Variables
let it = 0;
let li = 99;
let hs = 0;
let ls = 0;
// Bubble Sort Step
function BubbleSortStep ( randomNumberData, currentIndex ) {
if (randomNumberData[currentIndex + 1 ] == undefined) {
it++;
hs = 0;
return [0, false]
}
try {
let swapped = false;
if (randomNumberData[currentIndex] > randomNumberData[currentIndex + 1 ]) {
const nextValue = randomNumberData[currentIndex + 1];
randomNumberData[currentIndex + 1] = randomNumberData[currentIndex];
randomNumberData[currentIndex] = nextValue;
swapped = true;
SetBarHeights(randomNumberData, currentIndex + 1);
it++;
hs = currentIndex
return [currentIndex + 1, swapped];
} else {
it++;
SetBarHeights(randomNumberData, currentIndex + 1);
return [currentIndex + 1, swapped];
}
} catch {
it++;
hs = 0;
return [0, false]
}
};
// Data
const data = GenerateRandomNumberData()
SetBarHeights(data)
// Tet
function tet (index) {
if (it == li) {
it = 0;
li--;
return [0, true]
}
let [index2, swapped] = BubbleSortStep(data, index)
return [index2, swapped];
}
// Swap Variables
let index = 0;
let swapped;
let swappedCount = 0;
// Sort
let time = setInterval(() => {
[index, swapped] = tet(index);
if (swapped) {
swappedCount = 0;
} else {
swappedCount += 1;
}
if (swappedCount == 100) {
clearInterval(time)
SetBarHeightsr(data)
}
}, 1)