当前位置:首页 > VUE

用vue实现冒泡排序

2026-02-25 05:58:32VUE

实现思路

在Vue中实现冒泡排序,可以通过数据驱动视图的特性动态展示排序过程。核心是将排序算法与Vue的响应式数据结合,通过修改数组触发视图更新。

代码实现

<template>
  <div>
    <button @click="startSort">开始排序</button>
    <div class="array-container">
      <div 
        v-for="(item, index) in array" 
        :key="index" 
        class="array-item" 
        :style="{ height: `${item * 10}px` }"
      >
        {{ item }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      array: [5, 3, 8, 4, 2],
      sorting: false
    }
  },
  methods: {
    async startSort() {
      if (this.sorting) return
      this.sorting = true

      let arr = [...this.array]
      const len = arr.length

      for (let i = 0; i < len - 1; i++) {
        for (let j = 0; j < len - 1 - i; j++) {
          if (arr[j] > arr[j + 1]) {
            // 交换元素
            ;[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
            // 更新Vue响应式数据
            this.array = [...arr]
            // 添加延迟以便观察排序过程
            await new Promise(resolve => setTimeout(resolve, 500))
          }
        }
      }

      this.sorting = false
    }
  }
}
</script>

<style>
.array-container {
  display: flex;
  align-items: flex-end;
  gap: 10px;
  margin-top: 20px;
  height: 200px;
}

.array-item {
  width: 30px;
  background-color: #42b983;
  display: flex;
  justify-content: center;
  align-items: flex-end;
  padding-bottom: 5px;
  color: white;
  transition: all 0.3s ease;
}
</style>

关键点说明

使用Vue的响应式特性,在每次数组元素交换后更新this.array,触发视图重新渲染

通过awaitsetTimeout实现排序动画效果,使每一步变化可见

使用解构赋值[a, b] = [b, a]简洁地实现元素交换

CSS样式使数组元素以柱状图形式展示,高度与数值成正比

优化方向

添加排序状态提示,防止重复点击

实现随机数组生成功能

增加排序速度调节选项

用vue实现冒泡排序

添加排序完成的事件通知

标签: vue
分享给朋友:

相关文章

vue实现多级表头

vue实现多级表头

Vue 实现多级表头的方法 使用 el-table 组件 Element UI 的 el-table 组件支持多级表头的实现,通过嵌套 el-table-column 即可完成。 <el-ta…

vue实现无线滚动列表

vue实现无线滚动列表

无限滚动列表的实现方法 在Vue中实现无限滚动列表通常结合监听滚动事件和动态加载数据。以下是几种常见方法: 使用自定义指令 创建自定义指令v-infinite-scroll监听滚动事件: Vue.…

vue插槽实现

vue插槽实现

插槽的基本概念 Vue插槽(Slot)是一种内容分发机制,允许父组件向子组件传递模板片段,子组件通过<slot>标签定义接收位置。插槽的核心作用是增强组件的灵活性和复用性。 默认插槽 子…

vue实现必填

vue实现必填

Vue 实现表单必填验证的方法 在Vue中实现表单必填验证可以通过多种方式完成,以下是几种常见的方法: 使用HTML5原生属性 最简单的必填验证可以通过HTML5的required属性实现: &l…

vue实现tap

vue实现tap

Vue 实现 Tap 事件 在移动端开发中,Tap 事件比 Click 事件更常用,因为 Click 事件有 300ms 延迟。以下是几种在 Vue 中实现 Tap 事件的方法。 使用第三方库 安装…

vue实现阻塞

vue实现阻塞

Vue 实现阻塞的方法 在 Vue 中实现阻塞操作通常涉及异步控制、状态管理或生命周期钩子的使用。以下是几种常见方法: 使用 async/await 处理异步阻塞 通过 async/await 可…