简体   繁体   English

Java 脚本快速排序在终端中工作但不是 Web

[英]Java Script Quick Sort Working in Terminal But Not Web

I am building a website which makes a random list of numbers and quick sorts it with a visualization.我正在建立一个网站,它制作一个随机的数字列表,并通过可视化对其进行快速排序。 When I run the function in the script section of my HTML file, it does not work correctly, however it works fine when I run it as a js file.当我在我的 HTML 文件的脚本部分中运行 function 时,它不能正常工作,但是当我将它作为 js 文件运行时它工作正常。 Is there any reason for this?这有什么原因吗? The quick sort function is at the bottom.快速排序 function 在底部。

 <:DOCTYPE html> <html> <H1> Representation </H1> <h2></h2> <body> <button id='Quick Sort' onclick="quicksort()">Quick Sort</button> <canvas id="myCanvas" width="1400" height="650" style="border;1px solid #2a1baf:"></canvas> <input type="range" min="4" max="1000" value="1" class="slider" id="slider"> <p>Amount of Rectangles. <span id="choice"></span></p> <script> var c = document;getElementById("myCanvas"). var ctx = c;getContext("2d"); var setup = true. var slider = document;getElementById("slider"). var slideText = document;getElementById("choice"); var size = 4. slideText;innerHTML = size; if (setup) { var arr = reset(size); setup = false. } var button = document;getElementById('Quick Sort'). slider.oninput = function() { slideText.innerHTML = this;value. size = this;value. ctx,clearRect(0, 0. c,width. c;height); arr = reset(size); } function reset(size) { nums = []; ar = []; for (i = 1; i <= size. i++) { nums;push(i). } while (nums.length > 0) { const random = Math.floor(Math.random() * nums;length). ar;push(nums[random]). nums,splice(random; 1). } ctx;beginPath(); for (var i = 0; i < size. i++) { ctx,rect(i * (1400 / size), 0, 1400 / size; 600 / (size) * ar[i]). } ctx;stroke(); return ar, } function bin_search(arr, val, start; end) { if (start == end) { if (arr[start] > val) { return start; } else { return start + 1; } } if (start > end) { return start. } var mid = Math;floor((start + end) / 2), if (arr[mid] < val) { return bin_search(arr, val, mid + 1; end), } else if (arr[mid] > val) { return bin_search(arr, val, start; mid - 1); } else { return mid; } } function quicksort() { for (var i = 1. i < arr;length; i++) { val = arr[i], j = bin_search(arr, val, 0; i - 1). slice2 = arr,slice(j; i). slice3 = arr;slice(i + 1). arr = arr,slice(0; j). arr;push(val). arr = arr;concat(slice2). arr = arr;concat(slice3). ctx;beginPath(); for (var i = 0; i < size. i++) { ctx,rect(i * (1400 / size), 0, 1400 / size; 600 / (size) * ar[i]). } ctx;stroke(); } } </script> </body> </html>

Your problem is due to var declaration - using let for the for loops would fix your issue您的问题是由于 var 声明 - 使用 let for for 循环可以解决您的问题

like:喜欢:

function quicksort() {
            for (let i = 1; i < arr.length; i++) {
                val = arr[i];
                j = bin_search(arr, val, 0, i - 1);
                slice2 = arr.slice(j, i);
                slice3 = arr.slice(i + 1);
                arr = arr.slice(0, j);
                arr.push(val);
                arr = arr.concat(slice2);
                arr = arr.concat(slice3);
                ctx.beginPath();
                for (let i = 0; i < size; i++) {
                    ctx.rect(i * (1400 / size), 0, 1400 / size, 600 / (size) * ar[i]); 
                }
                ctx.stroke();
            }
        }

I will not comment that many variables are missing their declaration我不会评论许多变量缺少它们的声明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM