三种排序方法用js同步异步操作进行页面可视化展示
时间: 2024-02-11 19:06:41 浏览: 154
好的,我可以为您解答这个问题。
三种排序算法:冒泡排序、插入排序和选择排序,我分别为您提供同步和异步两种展示方式。
1. 同步展示
同步展示就是在排序过程中,每次交换元素或移动元素时,立即更新页面展示。以下是三种排序算法的同步展示实现:
冒泡排序同步展示:
```js
async function bubbleSort(arr) {
const len = arr.length;
for (let i = 0; i < len - 1; i++) {
for (let j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换元素
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
// 更新页面展示
await updateDisplay(arr);
}
}
}
}
function updateDisplay(arr) {
// 更新页面展示
}
```
插入排序同步展示:
```js
async function insertionSort(arr) {
const len = arr.length;
for (let i = 1; i < len; i++) {
let j = i - 1;
const temp = arr[i];
while (j >= 0 && arr[j] > temp) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
// 更新页面展示
await updateDisplay(arr);
}
}
function updateDisplay(arr) {
// 更新页面展示
}
```
选择排序同步展示:
```js
async function selectionSort(arr) {
const len = arr.length;
for (let i = 0; i < len - 1; i++) {
let minIndex = i;
for (let j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 交换元素
[arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
// 更新页面展示
await updateDisplay(arr);
}
}
function updateDisplay(arr) {
// 更新页面展示
}
```
2. 异步展示
异步展示就是将整个排序过程封装成一个 Promise,每次交换元素或移动元素时,返回一个 Promise 对象,等待 Promise 对象 resolve 后再更新页面展示。以下是三种排序算法的异步展示实现:
冒泡排序异步展示:
```js
function bubbleSort(arr) {
const len = arr.length;
return new Promise(resolve => {
for (let i = 0; i < len - 1; i++) {
for (let j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换元素
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
// 返回 Promise 对象
return new Promise(resolve => {
setTimeout(() => {
resolve();
}, 100);
}).then(() => {
// 更新页面展示
updateDisplay(arr);
// 递归调用 bubbleSort 函数
bubbleSort(arr).then(() => {
resolve();
});
});
}
}
}
resolve();
});
}
function updateDisplay(arr) {
// 更新页面展示
}
```
插入排序异步展示:
```js
function insertionSort(arr) {
const len = arr.length;
return new Promise(resolve => {
let i = 1;
function loop() {
if (i >= len) {
resolve();
return;
}
let j = i - 1;
const temp = arr[i];
while (j >= 0 && arr[j] > temp) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
// 返回 Promise 对象
return new Promise(resolve => {
setTimeout(() => {
resolve();
}, 100);
}).then(() => {
// 更新页面展示
updateDisplay(arr);
i++;
loop();
});
}
loop();
});
}
function updateDisplay(arr) {
// 更新页面展示
}
```
选择排序异步展示:
```js
function selectionSort(arr) {
const len = arr.length;
return new Promise(resolve => {
let i = 0;
function loop() {
if (i >= len - 1) {
resolve();
return;
}
let minIndex = i;
for (let j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 交换元素
[arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
// 返回 Promise 对象
return new Promise(resolve => {
setTimeout(() => {
resolve();
}, 100);
}).then(() => {
// 更新页面展示
updateDisplay(arr);
i++;
loop();
});
}
loop();
});
}
function updateDisplay(arr) {
// 更新页面展示
}
```
以上就是三种排序算法的同步和异步展示实现,希望能够帮助到您。
阅读全文