JavaScript - Cocktail Sort Visualizer Last Updated : 30 Nov, 2024 Comments Improve Suggest changes Like Article Like Report Cocktail Sort is a variation of Bubble Sort. Cocktail Sort traverses through a given array in both directions alternatively. An algorithm like Cocktail Sort can be easily understood by visualizing instead of long codes. The Cocktail Sort Visualizer is implemented using HTML, CSS & JavaScript.ApproachButton Generate New Array generates an array of random values using the Math.random() function and a bar corresponding to that value in terms of height.Different colors are used to indicate which elements are unsorted(sky-blue), compared(red) & sorted(lightgreen).Button Cocktail Sort the elements using the selection sort algorithm.Finally, elements are sorted. HTML <!DOCTYPE html> <html lang="en"> <head> <title>Cocktail Sort Visualizer</title> <link href="style.css" rel="stylesheet" /> </head> <body> <section class="head">Cocktail Sort</section> <section class="data-container"></section> <section id="ele"></section> <div style="margin: auto; width: fit-content"> <button class="btn1" onclick="generate()" id="Button1"> Generate New Array </button> <button class="btn2" onclick="CocktailSort(),disable()" id="Button2"> Cocktail Sort </button> </div> <script src="script.js"></script> </body> </html> CSS /*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; } JavaScript // 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 "Cocktail Sort" async function CocktailSort(delay = 600) { let bars = document.querySelectorAll(".bar"); // Initialize swapped with true let swapped = true; // Initialize s with zero let s = 0; // Initialize e with 20 let e = 20; while (swapped == true) { swapped = false; for (let i = s; i < e - 1; i++) { // Assigning value of ith bar into value1 let value1 = parseInt(bars[i] .childNodes[0].innerHTML); // Assigning value of i+1th bar into value2 let value2 = parseInt(bars[i + 1] .childNodes[0].innerHTML); // To pause the execution of code for 300 milliseconds await new Promise((resolve) => setTimeout(() => { resolve(); }, 300)); // Provide red color to the ith bar bars[i].style.backgroundColor = "red"; // Provide red color to the i+1th bar bars[i + 1].style.backgroundColor = "red"; if (value1 > value2) { let temp1 = bars[i].style.height; let temp2 = bars[i].childNodes[0].innerText; // To pause the execution of code for 300 milliseconds await new Promise((resolve) => setTimeout(() => { resolve(); }, 300)); // Swap ith bar with (i+1)th bar bars[i].style.height = bars[i + 1].style.height; bars[i].childNodes[0].innerText = bars[i + 1].childNodes[0].innerText; bars[i + 1].style.height = temp1; bars[i + 1].childNodes[0].innerText = temp2; // Set swapped swapped = true; } // To pause the execution of code for 300 milliseconds await new Promise((resolve) => setTimeout(() => { resolve(); }, 300)); // Provide skyblue color to the ith bar bars[i].style.backgroundColor = "rgb(0, 183, 255)"; // Provide skyblue color to the i+1th bar bars[i + 1].style.backgroundColor = "rgb(0, 183, 255)"; } if (swapped == false) { break; } // Set swapped false swapped = false; e = e - 1; for (var i = e - 1; i >= s; i--) { // Assigning value of ith bar into value1 let value1 = parseInt(bars[i] .childNodes[0].innerHTML); // Assigning value of i+1th bar into value2 let value2 = parseInt(bars[i + 1] .childNodes[0].innerHTML); // To pause the execution of code for 300 milliseconds await new Promise((resolve) => setTimeout(() => { resolve(); } , 300)); // Provide red color to the ith bar bars[i].style.backgroundColor = "red"; // Provide red color to the i+1th bar bars[i + 1].style.backgroundColor = "red"; if (value1 > value2) { let temp1 = bars[i].style.height; let temp2 = bars[i].childNodes[0].innerText; // To pause the execution of code for 300 milliseconds await new Promise((resolve) => setTimeout(() => { resolve(); }, 300)); // Swap ith bar with (i+1)th bar bars[i].style.height = bars[i + 1].style.height; bars[i].childNodes[0].innerText = bars[i + 1].childNodes[0].innerText; bars[i + 1].style.height = temp1; bars[i + 1].childNodes[0].innerText = temp2; // Set swapped swapped = true; } // To pause the execution of code for 300 milliseconds await new Promise((resolve) => setTimeout(() => { resolve(); }, 300)); //Provide skyblue color to the ith bar bars[i].style.backgroundColor = "rgb(0, 183, 255)"; // Provide skyblue color to the i+1th bar bars[i + 1].style.backgroundColor = "rgb(0, 183, 255)"; } s = s + 1; } for (let 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 "Cocktail 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 "Cocktail Sort" document.getElementById("Button2") .disabled = true; document.getElementById("Button2") .style.backgroundColor = "#d8b6ff"; } Output Comment More infoAdvertise with us Next Article JavaScript - Cocktail Sort Visualizer S shivammahajancse Follow Improve Article Tags : Sorting JavaScript Web Technologies HTML CSS DSA CSS-Properties JavaScript-Methods HTML-Questions CSS-Questions JavaScript-Questions +7 More Practice Tags : Sorting Similar Reads Comb Sort Visualizer using JavaScript Comb Sort is mainly an improvement over Bubble Sort. Comb Sort improves on Bubble Sort by using a gap of the size of more than 1. In order to know more about it. Please refer to Comb Sort. An algorithm like Comb Sort can be easily understood by visualizing instead of long codes. In this article, Com 5 min read Gnome Sort Visualizer using JavaScript In this article, we are going to learn Gnome sort Visualizer using javascript, Gnome Sort also called Stupid sort, is based on the concept of a Garden Gnome sorting his flower pots. In order to know more about it. Please refer to Gnome Sort.An algorithm like Gnome Sort can be easily understood by vi 4 min read Selection Sort Visualizer in JavaScript Selection sort is the simplest sorting algorithm that works by repeatedly finding the minimum element (considering ascending order) from the unsorted part and putting it at the beginning. In order to know more about it. Please refer to Selection SortAn algorithm like Selection Sort can be easily und 5 min read Bucket Sort Visualization Using Javascript GUI(Graphical User Interface) helps in better understanding than programs. In this article, we will visualize Bucket Sort using JavaScript. We will see how the elements are stored in Buckets and then how Buckets get traversed to get the final sorted array. We will also visualize the time complexity 7 min read Counting Sort Visualization using JavaScript GUI(Graphical User Interface) helps in better in understanding than programs. In this article, we will visualize Counting Sort using JavaScript. We will see how the frequencies of elements are stored and how we get the final sorted array. We will also visualize the time complexity of Counting Sort. 4 min read Like