Gnome Sort, también llamado Stupid sort, se basa en el concepto de un gnomo de jardín que clasifica sus macetas. Para saber más al respecto. Por favor refiérase a Gnome Sort .
Un algoritmo como Gnome Sort se puede entender fácilmente visualizando en lugar de códigos largos. En este artículo, Gnome Sort Visualizer se implementa mediante HTML, CSS y JavaScript .
Requisitos previos:
- Clasificación de gnomos .
- HTML básico, CSS y JavaScript.
- Promesas de JavaScript .
- Función asincrónica/espera de JavaScript .
Acercarse:
- Button Generate New Array genera una array de valores aleatorios usando la función Math.random() y una barra correspondiente a ese valor en términos de altura.
- Se utilizan diferentes colores para indicar qué elementos no están ordenados (azul cielo), comparados (azul oscuro y rojo) y ordenados (verde claro).
- Botón Gnome Ordena los elementos usando el algoritmo de clasificación Gnome.
- Finalmente, se ordenan los elementos.
index.html
<!DOCTYPE html> <html lang="en"> <!-- Head --> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <!-- Title --> <title>Gnome Sort Visualizer</title> <!-- Linking style.css --> <link href="style.css" rel="stylesheet" /> </head> <!-- Body --> <body> <section class="head">Gnome Sort Visualizer</section> <section class="data-container"></section> <section id="ele"></section> <div style="margin: auto; width: fit-content"> <!-- "Generate New Array" button --> <button class="btn1" onclick="generate()" id="Button1"> Generate New Array </button> <!-- "Gnome Sort" button --> <button class="btn2" onclick="CombSort(),disable()" id="Button2"> Gnome Sort </button> </div> </body> <!-- Linking script.js --> <script src="script.js"></script> </html>
style.css
.mySlides { display: none; } body { background-color: rgb(255, 235, 211); font-family: Verdana, sans-serif; } .head { margin-top: 20px; margin-right: 20vw; margin-left: 20vw; text-align: center; font-size: 30px; background-color: #6f459e; color: white; border-radius: 19px; font-weight: bolder; } .data-container { width: 600px; height: 364px; position: relative; margin: 0 auto; } .bar { width: 28px; position: absolute; left: 0; bottom: 0; background-color: rgb(0, 183, 255); transition: 0.2s all ease; } .bar__id { position: absolute; top: -24px; width: 100%; text-align: center; } .btn1 { padding: 12px; font-weight: bolder; background-color: #6f459e; border-radius: 10px; color: white; font-size: 16px; border: white; margin-top: 1vw; margin-right: 1vw; } .btn2 { padding: 12px; font-weight: bolder; background-color: #6f459e; border-radius: 10px; color: white; font-size: 16px; border: white; } #ele { text-align: center; height: 35px; }
script.js
const container = document.querySelector(".data-container"); // Function to generate bars function generatebars(num = 20) { // For loop to generate 20 bars for (let i = 0; i < num; i += 1) { // To generate random values from 1 to 100 const value = Math.floor(Math.random() * 100) + 1; // To create element "div" const bar = document.createElement("div"); // To add class "bar" to "div" bar.classList.add("bar"); // Provide height to the bar bar.style.height = `${value * 3}px`; // Translate the bar towards positive X axis bar.style.transform = `translateX(${i * 30}px)`; // To create element "label" const barLabel = document.createElement("label"); // To add class "bar_id" to "label" barLabel.classList.add("bar__id"); // Assign value to "label" barLabel.innerHTML = value; // Append "Label" to "div" bar.appendChild(barLabel); // Append "div" to "data-container div" container.appendChild(bar); } } // Asynchronous function to perform "Gnome Sort" async function CombSort(delay = 600) { let bars = document.querySelectorAll(".bar"); var pos = 0; while (pos < 20) { if (pos == 0) { pos++; } // Assigning value of posth bar into value1 var value1 = parseInt(bars[pos].childNodes[0].innerHTML); // Assigning value of pos-1th bar into value1 var value2 = parseInt(bars[pos - 1].childNodes[0].innerHTML); // Comparing value1 and value2 if (value1 >= value2) { pos++; } else { // Provide red color to the posth bar bars[pos].style.backgroundColor = "red"; // Provide red color to the pos-1th bar bars[pos - 1].style.backgroundColor = "red"; // Swap posth bar with (pos-1)th bar var temp1 = bars[pos].style.height; var temp2 = bars[pos].childNodes[0].innerText; // To pause the execution of code for 300 milliseconds await new Promise((resolve) => setTimeout(() => { resolve(); }, 300) ); // Swap posth bar with (pos-1)th bar bars[pos].style.height = bars[pos - 1].style.height; bars[pos].childNodes[0].innerText = bars[pos - 1].childNodes[0].innerText; bars[pos - 1].style.height = temp1; bars[pos - 1].childNodes[0].innerText = temp2; pos--; } // To pause the execution of code for 300 milliseconds await new Promise((resolve) => setTimeout(() => { resolve(); }, 300) ); // Providing skyblue color for (var x = 0; x < 20; x++) { bars[x].style.backgroundColor = "rgb(0, 183, 255)"; } } // Providing lightgreen color for (var x = 0; x < 20; x++) { bars[x].style.backgroundColor = "rgb(49, 226, 13)"; } // To enable the button "Generate New Array" after final(sorted) document.getElementById("Button1").disabled = false; document.getElementById("Button1").style.backgroundColor = "#6f459e"; // To enable the button "Gnome Sort" after final(sorted) document.getElementById("Button2").disabled = false; document.getElementById("Button2").style.backgroundColor = "#6f459e"; } // Call "generatebars()" function generatebars(); // Function to generate new random array function generate() { window.location.reload(); } // Function to disable the button function disable() { // To disable the button "Generate New Array" document.getElementById("Button1").disabled = true; document.getElementById("Button1").style.backgroundColor = "#d8b6ff"; // To disable the button "Gnome Sort" document.getElementById("Button2").disabled = true; document.getElementById("Button2").style.backgroundColor = "#d8b6ff"; }
Producción:
Publicación traducida automáticamente
Artículo escrito por shivammahajancse y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA