JavaScript实现经典排序算法之冒泡排序

yizhihongxing

JavaScript实现经典排序算法之冒泡排序

什么是冒泡排序?

冒泡排序是一种简单的排序算法,从序列左侧开始比较两个相邻的元素,如果顺序不对就交换位置,直到序列末尾,这样一次遍历后,序列最后一个元素就是当前序列最大值。然后对剩余序列重复上述过程,直到整个序列有序。

算法实现

我们来看看如何用JavaScript实现冒泡排序。

function bubbleSort(arr) {
  var len = arr.length;
  for (var i = 0; i < len - 1; i++) {
    for (var j = 0; j < len - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {
        var temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
  return arr;
}

代码中的bubbleSort函数接受一个数组作为参数,然后用双重循环实现冒泡排序的过程。外层循环控制比较的趟数,内层循环控制每趟比较的次数。

在内层循环中,比较相邻两个元素,如果前一个元素比后一个元素大,就交换两个元素的位置,直到序列末尾。经过一次循环,序列中最大的元素就被排在了序列的最后。

接着,外层循环将比较的范围缩小1个元素,即不再比较已经排好序的元素。重复上述过程,直到整个序列有序。

让我们看看一些数组排序示例。

示例

示例1:

var arr = [5, 1, 4, 2, 8];
var sortedArr = bubbleSort(arr);
console.log(sortedArr);  // [1, 2, 4, 5, 8]

如上所示,arr数组中包含5个元素,即要排序的序列。在排序后,sortedArr数组中的元素按从小到大的顺序排列。

示例2:

我们还可以用冒泡排序来对一个表格的行进行排序。下面是一个HTML表格示例:

<table>
  <thead>
    <tr>
      <th>ID</th>
      <th>姓名</th>
      <th>年龄</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>张三</td>
      <td>23</td>
    </tr>
    <tr>
      <td>2</td>
      <td>李四</td>
      <td>25</td>
    </tr>
    <tr>
      <td>3</td>
      <td>王五</td>
      <td>21</td>
    </tr>
    <tr>
      <td>4</td>
      <td>赵六</td>
      <td>27</td>
    </tr>
    <tr>
      <td>5</td>
      <td>钱七</td>
      <td>22</td>
    </tr>
  </tbody>
</table>

我们可以编写以下代码,在点击表头的姓名列时,对表格的行按姓名的字母顺序(从小到大)进行排序:

var tbody = document.querySelector('tbody');
var nameTh = document.querySelector('th:nth-of-type(2)');
nameTh.addEventListener('click', function() {
  var rows = tbody.querySelectorAll('tr');
  var len = rows.length;
  for (var i = 0; i < len - 1; i++) {
    for (var j = 0; j < len - 1 - i; j++) {
      var currentName = rows[j].querySelector('td:nth-of-type(2)').textContent;
      var nextName = rows[j + 1].querySelector('td:nth-of-type(2)').textContent;
      if (currentName > nextName) {
        tbody.insertBefore(rows[j + 1], rows[j]);
      }
    }
  }
});

代码解释:

我们首先通过document.querySelector方法选中了表格的tbody和姓名列的表头。

我们给姓名列的表头添加一个click事件监听器,在每次单击表头时触发排序操作。

在事件处理程序中,使用querySeletorAll方法选中了所有的表格行tr,并通过双重循环实现冒泡排序的过程。

排序过程中,我们从每一行中提取姓名的字母顺序进行比较,然后使用insertBefore方法对其进行插入排序。

总结

以上就是JavaScript实现冒泡排序的完整攻略,我们通过详细讲解了算法的原理和实现过程,并给出了两个示例。

冒泡排序虽然简单,但是在实际应用中并不常用,因为其时间复杂度较高,在大规模数据中排序速度较慢。因此,我们更多地使用快速排序、归并排序、堆排序等快速排序算法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现经典排序算法之冒泡排序 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 合并排序(C语言实现)

    合并排序(C语言实现) 合并排序是一种将待排序序列分成多个子序列,分别进行排序,然后再将排序后的子序列合并成整体有序序列的排序算法。使用递归实现时,该算法的时间复杂度为O(nlogn),因此被广泛应用。 实现步骤 合并排序可以用以下步骤来实现: 分治:将待排序序列从中间分成两部分,递归地对左右两部分进行排序。 合并:将两个有序子序列合并成一个有序序列。 在实…

    算法与数据结构 2023年5月19日
    00
  • php数组冒泡排序算法实例

    让我们来详细讲解一下“PHP 数组冒泡排序算法实例”。 什么是冒泡排序? 冒泡排序算法是一种基于比较的排序算法,它重复地遍历要排序的列表,比较相邻的两个元素,如果它们的顺序错误,就将它们交换位置。这个过程直接比较相邻元素,每一轮都将最小的元素放到序列的开头,就像气泡不断上升一样,因此得名冒泡排序。 基本的冒泡排序实现方法 下面是一个基本的实现方法,用 PHP…

    算法与数据结构 2023年5月19日
    00
  • JS栈stack类的实现与使用方法示例

    JS栈Stack类的实现与使用方法示例 一、栈的概念 栈(stack)是一种线性数据结构,它有两个主要操作:入栈(push)和出栈(pop)。栈的特点是先进后出(FILO,First In, Last Out)。从数据结构的角度来说,栈是在同一端进行插入和删除操作的一种数据结构。该端被称为栈顶,相对地,把另一端称为栈底。 在计算机科学中,栈具有非常重要的作用…

    算法与数据结构 2023年5月19日
    00
  • C++ 计数排序实例详解

    C++ 计数排序实例详解 简介 计数排序是一种稳定的排序算法,其时间复杂度为O(n + k),其中n为待排序序列的长度,k为序列中元素的取值范围。相比其他排序算法,计数排序的时间复杂度较小,但需要占用更多的内存空间。计数排序在排序的元素值比较小,且元素集合密集程度比较大的场景下表现更加出色。 算法原理 计数排序的基本思想是,统计待排序序列中,每个元素出现的个…

    算法与数据结构 2023年5月19日
    00
  • C语言常见排序算法之交换排序(冒泡排序,快速排序)

    交换排序主要有两种:冒泡排序和快速排序。下面我将分别详细介绍这两种排序算法的原理、过程和示例。 冒泡排序 原理 冒泡排序是一种基本的排序方法,它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。重复操作直到排序完成。 过程 冒泡排序的过程可以被描述如下: 比较相邻的元素。如果第一个比第二个大,就交换它们两个。 对每一对相邻元素做…

    算法与数据结构 2023年5月19日
    00
  • C++超详细讲解贪心策略的设计及解决会场安排问题

    C++超详细讲解贪心策略的设计及解决会场安排问题 什么是贪心算法 贪心算法是一种近似算法,通常用于求解最优化问题。在每一步,贪心算法总是做出在当前看来最优的选择,并希望通过这样的选择最终能达到全局最优。 解决会场安排问题的贪心策略 问题描述 为了方便会议的安排,需要一个会议室来容纳所有的会议。现在有n个会议需要在会议室中安排,假设每个会议被安排在一个时间段内…

    算法与数据结构 2023年5月19日
    00
  • 必须知道的C语言八大排序算法(收藏)

    必须知道的C语言八大排序算法(收藏) 简介 排序算法(sorting algorithms)是计算机程序设计中处理数据的重要技术之一,常见于数据处理程序中。其功能是按照指定的方式将所输入的数据进行排序。排序算法分为内部排序和外部排序,本文主要讲解C语言中的八大内部排序算法。 八大排序算法 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 计…

    算法与数据结构 2023年5月19日
    00
  • C语言实现单链表的快速排序算法

    下面是详细的攻略: 单链表快速排序算法的原理 在单链表上实现快速排序,需要了解快速排序算法的原理。快速排序是一种常用的基于比较的排序算法,它的基本思想是:选取一个基准元素(pivot),将数组分成两个部分,一个部分是小于基准元素的,一个部分是大于基准元素的。然后对这两个部分分别递归进行快排,最终得到排序后的数组。 在单链表上,选择基准元素也是一样的,不同的是…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部