js用异步操作做一个页面内用柱状图表示数据,动态鲜明地展示三种排序方法的数据比较过程和排序过程
时间: 2024-02-11 08:07:54 浏览: 78
首先需要准备数据和柱状图的HTML结构,然后通过异步操作获取数据并进行排序,最后实时更新柱状图展示数据比较过程和排序过程。
以下是一个可能的实现方法:
HTML结构:
```html
<div id="chart">
<div class="bar-group" id="bar-group1">
<div class="bar" style="height: 0;"></div>
<div class="bar" style="height: 0;"></div>
<div class="bar" style="height: 0;"></div>
</div>
<div class="bar-group" id="bar-group2">
<div class="bar" style="height: 0;"></div>
<div class="bar" style="height: 0;"></div>
<div class="bar" style="height: 0;"></div>
</div>
<div class="bar-group" id="bar-group3">
<div class="bar" style="height: 0;"></div>
<div class="bar" style="height: 0;"></div>
<div class="bar" style="height: 0;"></div>
</div>
</div>
```
CSS样式:
```css
#chart {
display: flex;
justify-content: space-between;
height: 200px;
}
.bar-group {
display: flex;
flex-direction: column-reverse;
align-items: center;
width: 100px;
}
.bar {
width: 20px;
margin: 5px;
background-color: blue;
transition: height 0.5s;
}
```
JavaScript代码:
```javascript
// 定义数据
const data = [8, 3, 1, 5, 9, 2, 7, 4, 6];
// 定义排序函数
function bubbleSort(arr) {
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
}
function selectionSort(arr) {
for (let i = 0; i < arr.length - 1; i++) {
let minIndex = i;
for (let j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
[arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
}
}
function insertionSort(arr) {
for (let i = 1; i < arr.length; i++) {
let temp = arr[i];
let j = i - 1;
while (j >= 0 && arr[j] > temp) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
}
}
// 获取HTML元素
const chart = document.getElementById("chart");
const barGroups = chart.getElementsByClassName("bar-group");
// 定义异步函数展示排序过程
async function showSortProcess(sortFunc, barGroup) {
for (let i = 0; i < data.length - 1; i++) {
for (let j = 0; j < data.length - 1 - i; j++) {
if (data[j] > data[j + 1]) {
[data[j], data[j + 1]] = [data[j + 1], data[j]];
}
// 更新柱状图高度
for (let k = 0; k < data.length; k++) {
barGroup.children[k].style.height = `${data[k] * 20}px`;
}
// 等待0.5秒
await new Promise((resolve) => setTimeout(resolve, 500));
}
}
}
// 展示排序过程和比较结果
async function showSortComparison() {
// 展示冒泡排序过程
await showSortProcess(bubbleSort, barGroups[0]);
// 等待1秒
await new Promise((resolve) => setTimeout(resolve, 1000));
// 展示选择排序过程
await showSortProcess(selectionSort, barGroups[1]);
// 等待1秒
await new Promise((resolve) => setTimeout(resolve, 1000));
// 展示插入排序过程
await showSortProcess(insertionSort, barGroups[2]);
}
// 调用展示函数
showSortComparison();
```
这样,页面就可以展示柱状图和数据比较排序过程了。
阅读全文