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

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语言5个常用的排序算法实例代码

    C语言5个常用的排序算法实例代码 本文旨在讲解C语言中常用的5种排序算法,包括冒泡排序、选择排序、插入排序、快速排序和归并排序。以下将逐一介绍它们的实现过程,并提供示例代码。 冒泡排序(Bubble Sort) 算法思想:冒泡排序是一种简单的排序算法,它会首先比较相邻的元素,如果它们的顺序不正确,就交换它们的位置。这样一遍比较下来,最后一个元素就已经是最大的…

    算法与数据结构 2023年5月19日
    00
  • 利用JavaScript实现的10种排序算法总结

    作为“利用JavaScript实现的10种排序算法总结”的作者,首先需要明确以下内容: 熟悉10种排序算法的原理与流程 理解JavaScript作为一门编程语言的特点和应用场景 知道如何将算法的流程用JavaScript代码实现 针对以上内容,可以采取以下步骤: 梳理10种排序算法的流程和实现方式,用markdown文本形式编写对应的标题和文本,例如: 插入…

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

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

    算法与数据结构 2023年5月19日
    00
  • PHP 数组排序方法总结 推荐收藏

    PHP 数组排序方法总结 推荐收藏 1. 为什么要学习数组排序 PHP 数组内置的排序函数,能够对数组的元素进行排序,满足不同场景下的需求。理解如何使用数组排序函数能够提高开发效率,并且能够帮助开发者写出更加高效、优雅的代码。 2. PHP 数组排序函数总结 PHP 数组的排序方法主要有以下几种: 2.1 sort() 对数组进行升序排列。 2.1.1 排序…

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

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

    算法与数据结构 2023年5月19日
    00
  • C/C++实现八大排序算法汇总

    C/C++实现八大排序算法汇总 简介 本文旨在介绍常用的八大排序算法并用 C/C++ 语言实现。 八大排序算法包括: 冒泡排序(Bubble Sort) 插入排序(Insertion Sort) 选择排序(Selection Sort) 快速排序(Quick Sort) 归并排序(Merge Sort) 希尔排序(Shell Sort) 堆排序(Heap S…

    算法与数据结构 2023年5月19日
    00
  • TF-IDF与余弦相似性的应用(一) 自动提取关键词

    下面我将详细讲解“TF-IDF与余弦相似性的应用(一) 自动提取关键词”的完整攻略。 什么是TF-IDF? TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用于信息检索与分类中的文本特征提取方法,用于评估一段文本中词的重要程度。TF-IDF的核心思想就是:一个词在一篇文档中出现的频次(TF)越高,同时…

    算法与数据结构 2023年5月19日
    00
  • JavaScript实现数组全排列、去重及求最大值算法示例

    JavaScript实现数组全排列、去重及求最大值算法示例 实现数组全排列 数组的全排列即为将数组中所有元素进行全排列的结果。实现数组全排列的常用方法为回溯法。 回溯法的思想是从第一个元素开始,固定第一个元素,对于剩下的元素进行全排列,得到结果后将第一个元素与第二个元素交换,并对第二个元素之后的元素进行全排列,以此类推,直到最后一个元素,此时将所有的结果返回…

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