// 插入排序动画模拟的JavaScript示例
// 假设我们有一个数组和一个简单的DOM元素来显示排序过程
let arr = [5, 3, 8, 4, 2];
let container = document.getElementById('sortContainer'); // 假设有一个id为sortContainer的容器
function displayArray(arr) {
// 清除之前的显示
container.innerHTML = '';
// 重新渲染数组
arr.forEach((item, index) => {
let div = document.createElement('div');
div.style.width = `${item * 10}px`; // 假设每个元素的值决定了其宽度
div.style.height = '20px';
div.style.backgroundColor = 'skyblue';
div.style.display = 'inline-block';
div.style.margin = '2px';
div.textContent = item;
container.appendChild(div);
});
}
function insertionSort(arr) {
for (let i = 1; i < arr.length; i++) {
let key = arr[i];
let j = i - 1;
// 显示当前状态
displayArray(arr.slice(0, i + 1).concat(arr.slice(i + 1)));
/*
* 这里的setTimeout仅用于模拟动画效果,实际动画中你可能需要更复杂的逻辑
* 来控制DOM的更新和渲染,或者使用requestAnimationFrame等API
*/
setTimeout(() => {
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
// 再次显示排序后的部分数组,以模拟动画
displayArray(arr.slice(0, i + 1).concat(arr.slice(i + 1)));
}, 500); // 假设每次移动间隔500毫秒
}
}
// 初始显示数组
displayArray(arr);
// 开始排序
insertionSort(arr);
**注意**:
1. 上面的代码是一个简化的示例,用于在网页上模拟插入排序的动画效果。
2. `setTimeout` 用于模拟动画的延迟效果,实际开发中可能需要使用更高效的动画处理方法,如CSS动画或`requestAnimationFrame`。
3. 数组的元素值被假设为可以直接决定其显示宽度的数值,实际使用时可能需要调整以适应不同类型的元素。
4. 假设有一个HTML元素,其ID为`sortContainer`,用于显示排序过程中的数组元素。
5. 由于JavaScript的单线程特性,`setTimeout`并不会真正“暂停”代码的执行,而是将回调函数放入事件循环的队列中等待执行。因此,动画的流畅度可能受到浏览器解析和执行JavaScript代码速度的影响。