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日

相关文章

  • 详解go语言中sort如何排序

    下面是关于”go语言中sort如何排序”的详细讲解。 sort 包简介 sort 包是 Go 语言标准库中的一个包,主要提供排序的功能,使用方便,可以满足我们日常开发中各种排序需求。sort 包中提供的排序方法有: sort.Slice sort.SliceStable sort.Sort sort.Stable sort.Slice sort.Slice …

    算法与数据结构 2023年5月19日
    00
  • JS实现随机化快速排序的实例代码

    下面是JS实现随机化快速排序的完整攻略。 什么是随机化快速排序 随机化快速排序是一个常用的排序算法,它能够在 $O(n \log n)$ 的时间复杂度下对一个数组进行排序。该算法的实现非常高效,因为它使用了分治的思想,并且使用的是原地排序,即不需要额外的存储空间。随机化快速排序的核心是分区(partition)操作,该操作能够将一个数组分成两个部分,一部分是…

    算法与数据结构 2023年5月19日
    00
  • C语言中的5种简单排序算法(适合小白)

    C语言中的5种简单排序算法(适合小白) 介绍 排序算法是计算机科学中最基本的算法之一,其主要目的是将一组无序的数据按照一定的规则进行排列。在计算机程序设计中,排序算法是非常常用的操作之一。 本文将会介绍C语言中5种简单的排序算法,这些算法非常适合新手上手学习。 以下是5种简单排序算法的详细介绍和实例代码。 冒泡排序(Bubble Sort) 冒泡排序也是一种…

    算法与数据结构 2023年5月19日
    00
  • java垃圾收集器与内存分配策略详解

    Java垃圾收集器与内存分配策略详解 什么是垃圾收集器? Java垃圾收集器是Java虚拟机(JVM)提供的一种内存管理机制,它用于回收不再被程序引用的对象以节省内存空间。垃圾收集器通过对程序进行监控,可以自动发现未被引用的对象并将其回收。Java中的垃圾收集器大致可以分为如下四种: Serial Parallel Concurrent Mark Sweep…

    算法与数据结构 2023年5月19日
    00
  • Java中自然排序和比较器排序详解

    Java中自然排序和比较器排序详解 简介 Java中排序分为自然排序和比较器排序两种方式。当对象包含了Comparable接口实现的compareTo方法时,便支持了自然排序。而比较器排序则需要自己实现一个Comparator接口,并传入调用方法中。本文将从以下几个方面详细介绍这两种排序方式: Comparable接口及compareTo方法 Compara…

    算法与数据结构 2023年5月19日
    00
  • JS实现的全排列组合算法示例

    下面针对 “JS实现的全排列组合算法示例” 给出完整攻略。 什么是全排列组合算法? 全排列组合是指将一个集合中的元素排成一列,可以有不同的排列方式,这些不同的排列方式就称为全排列。当从这个集合中取出一部分排成一列时,称为排列,而取出一部分组合称为组合。 JS实现全排列组合算法的步骤 具体实现全排列组合算法的步骤如下: 定义需要排列和组合的数组或字符串; 定义…

    算法与数据结构 2023年5月19日
    00
  • Java 十大排序算法之计数排序刨析

    Java 十大排序算法之计数排序刨析 算法介绍 计数排序是一个时间复杂度为O(n+k)的非基于比较的排序算法,其中n是待排序元素的个数,k是待排序元素的范围,即待排序元素的最大值减去最小值再加1。 算法通过构建一个长度为k的计数数组来统计每个元素出现的次数,然后借助计数数组按顺序输出每个元素,就完成了排序过程。 因为计数排序是非基于比较的算法,因此可以在一定…

    算法与数据结构 2023年5月19日
    00
  • Java排序之冒泡排序的实现与优化

    Java排序之冒泡排序的实现与优化 冒泡排序基本原理 冒泡排序是一种简单的排序算法,其基本思想是通过比较相邻的元素,将较大的数交换到右边,较小的数交换到左边。这样每一轮交换后,未排序的数列中的最大元素就被移动到了最右边,因此被称为“冒泡排序”。 基本算法实现 下面是基本的冒泡排序算法实现: public static void bubbleSort(int[…

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