La GUI (interfaz gráfica de usuario) ayuda a los usuarios a comprender mejor los programas. En este artículo, visualizaremos Merge Sort usando JavaScript. Veremos cómo las arrays se dividen y fusionan después de ordenar para obtener la array ordenada final.
Referirse:
Acercarse:
- Primero, generaremos una array aleatoria usando Math. función aleatoria() .
- Las propiedades del lienzo se usan para hacer barras rectangulares y animaciones.
- Se utilizan diferentes colores para indicar qué arrays se dividen y fusionan.
- La clasificación se realiza mediante la función mergeSort() de JavaScript .
- El algoritmo realiza la operación muy rápido, se ha utilizado la función timeout() para ralentizar el proceso.
lista desordenada:
lista ordenada:
index.html: A continuación se muestra el programa para visualizar el algoritmo Merge Sort.
HTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <h1 class="title" style = "color: green; font:lighter; "> Merge Sort Visualizer using JS</h1> <h2 class="title1" style = "background: green; color: white; font: italic;">Array is not sorted </h2> <canvas id="Canvas"></canvas> <script src="mergeSort.js"></script> </body> </html>
mergeSort.js : el siguiente es el contenido del archivo «mergeSort.js» utilizado en el código HTML anterior.
Javascript
// Canvas variables var canvas, canvaswidth, canvasheight, ctrl; // Call canvasElements() to store height width // in above canvas variables canvasElements(); // 3 array are declared //1) arr is for storing array element //2) itmd for storing intermediate values //3) visited is for element which has been sorted var arr = [], itmd = [], visited = [] // Length of unsorted array var len_of_arr = 40; // Store random value in arr[] for (var i = 0; i < len_of_arr; i++) { arr.push(Math.round(Math.random() * 250) ) } // Initialize itmd and visited array with 0 for (var i = 0; i < len_of_arr; i++) { itmd.push(0) visited.push(0) } // Merging of two sub array // https://www.geeksforgeeks.org/merge-two-sorted-arrays/ function mergeArray(start, end) { let mid = parseInt((start + end) >> 1); let start1 = start, start2 = mid + 1 let end1 = mid, end2 = end // Initial index of merged subarray let index = start while (start1 <= end1 && start2 <= end2) { if (arr[start1] <= arr[start2]) { itmd[index] = arr[start1] index = index + 1 start1 = start1 + 1; } else if(arr[start1] > arr[start2]) { itmd[index] = arr[start2] index = index + 1 start2 = start2 + 1; } } // Copy the remaining elements of // arr[], if there are any while (start1 <= end1) { itmd[index] = arr[start1] index = index + 1 start1 = start1 + 1; } while (start2 <= end2) { itmd[index] = arr[start2] index = index + 1 start2 = start2 + 1; } index = start while (index <= end) { arr[index] = itmd[index]; index++; } } // Function for showing visualization // effect function drawBars(start, end) { // Clear previous unsorted bars ctrl.clearRect(0, 0, 1000, 1500) // Styling of bars for (let i = 0; i < len_of_arr; i++) { // Changing styles of bars ctrl.fillStyle = "black" ctrl.shadowOffsetX = 2 ctrl.shadowColor = "chocolate"; ctrl.shadowBlur = 3; ctrl.shadowOffsetY =5; // Size of rectangle of bars ctrl.fillRect(25 * i, 300 - arr[i], 20, arr[i]) if (visited[i]) { ctrl.fillStyle = "#006d13" ctrl.fillRect(25 * i, 300 - arr[i], 20, arr[i]) ctrl.shadowOffsetX = 2 } } for (let i = start; i <= end; i++) { ctrl.fillStyle = "orange" ctrl.fillRect(25 * i, 300 - arr[i], 18, arr[i]) ctrl.fillStyle = "#cdff6c" ctrl.fillRect(25 * i,300, 18, arr[i]) visited[i] = 1 } } // Waiting interval between two bars function timeout(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } // Merge Sorting const mergeSort = async (start, end) => { if (start < end) { let mid = parseInt((start + end) >> 1) await mergeSort(start, mid) await mergeSort(mid + 1, end) await mergeArray(start, end) await drawBars(start, end) // Waiting time is 800ms await timeout(800) } } // canvasElements function for storing // width and height in canvas variable function canvasElements() { canvas = document.getElementById("Canvas") canvas.width = canvas.height = 1000 canvaswidth = canvas.width canvasheight = canvas.height ctrl = canvas.getContext("2d") } // Asynchronous MergeSort function const performer = async () => { await mergeSort(0, len_of_arr - 1) await drawBars() // Code for change title1 text const title1_changer = document.querySelector(".title1") title1_changer.innerText = "Array is completely sorted" } performer()
Producción:
Publicación traducida automáticamente
Artículo escrito por kapil16garg y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA