js做一个页面内用柱状图表示数据,动态地展示三种排序方法的排序过程
时间: 2024-02-11 08:07:39 浏览: 106
js排序算法动态展示
好的,我可以给你提供一个基于JavaScript和HTML的简单示例代码,该代码可以动态地展示三种排序算法(冒泡排序、插入排序和选择排序)的排序过程,用柱状图表示数据。
首先,我们需要一个HTML页面,其中包含一个用于显示柱状图的<canvas>元素和三个按钮,用于触发三种排序算法。页面代码如下:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>排序算法可视化</title>
<style>
canvas {
border: 1px solid #ccc;
}
</style>
</head>
<body>
<canvas id="chart" width="600" height="400"></canvas>
<br>
<button id="bubble-sort">冒泡排序</button>
<button id="insertion-sort">插入排序</button>
<button id="selection-sort">选择排序</button>
<script src="sort.js"></script>
</body>
</html>
```
在<canvas>元素上绘制柱状图,我们需要使用JavaScript中的Canvas API。我们可以先定义一个函数drawChart来绘制柱状图,该函数接受一个数组作为参数,数组中的每个元素代表柱子的高度。
```javascript
function drawChart(data) {
var canvas = document.getElementById('chart');
var ctx = canvas.getContext('2d');
var width = canvas.width;
var height = canvas.height;
var barWidth = width / data.length;
var maxVal = Math.max.apply(Math, data);
var scale = height / maxVal;
ctx.clearRect(0, 0, width, height);
ctx.fillStyle = 'blue';
for (var i = 0; i < data.length; i++) {
var x = i * barWidth;
var y = height - data[i] * scale;
var barHeight = data[i] * scale;
ctx.fillRect(x, y, barWidth, barHeight);
}
}
```
接下来,我们实现三种排序算法的排序过程,并在每次交换或移动元素时动态更新柱状图。这里我们采用了setTimeout函数来模拟动画效果,每个操作之间间隔500毫秒。
```javascript
function bubbleSort(data) {
var len = data.length;
for (var i = 0; i < len - 1; i++) {
for (var j = 0; j < len - i - 1; j++) {
if (data[j] > data[j + 1]) {
var temp = data[j];
data[j] = data[j + 1];
data[j + 1] = temp;
setTimeout(function() {
drawChart(data);
}, 500);
}
}
}
}
function insertionSort(data) {
var len = data.length;
for (var i = 1; i < len; i++) {
var key = data[i];
var j = i - 1;
while (j >= 0 && data[j] > key) {
data[j + 1] = data[j];
j--;
setTimeout(function() {
drawChart(data);
}, 500);
}
data[j + 1] = key;
setTimeout(function() {
drawChart(data);
}, 500);
}
}
function selectionSort(data) {
var len = data.length;
for (var i = 0; i < len - 1; i++) {
var minIndex = i;
for (var j = i + 1; j < len; j++) {
if (data[j] < data[minIndex]) {
minIndex = j;
}
}
var temp = data[i];
data[i] = data[minIndex];
data[minIndex] = temp;
setTimeout(function() {
drawChart(data);
}, 500);
}
}
```
最后,在页面加载完成时,我们为三个按钮分别绑定事件处理函数,当用户点击某个按钮时,相应的排序算法就会被调用。
```javascript
window.onload = function() {
var data = [30, 20, 50, 10, 40];
drawChart(data);
var bubbleSortBtn = document.getElementById('bubble-sort');
bubbleSortBtn.onclick = function() {
bubbleSort(data.slice());
};
var insertionSortBtn = document.getElementById('insertion-sort');
insertionSortBtn.onclick = function() {
insertionSort(data.slice());
};
var selectionSortBtn = document.getElementById('selection-sort');
selectionSortBtn.onclick = function() {
selectionSort(data.slice());
};
};
```
这样,我们就完成了一个简单的页面内用柱状图表示数据,动态地展示三种排序方法的排序过程的示例。
阅读全文