算法笔记系列:冒泡排序

Posted JavaScript开发者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法笔记系列:冒泡排序相关的知识,希望对你有一定的参考价值。

冒泡排序
一种型的简单的稳定排序算法。因在排序过程中,目标元素会像“气泡”一样从序列中“浮动”到期望的位置,故得此名。
实现原理 :遍历待排序的数据,并依次比较其中两个相邻的元素,如果两者之间的顺序是逆位的,则进行交换操作 (在第m轮后,data[n-m, n)是已经排序过的) 。次轮,对剩余待排序的部分重复地进行上述操作,直至排序全部完成。

普通版

function bubbleSort(arr) { // 外层进行 n-1 轮遍历 for (var i = 0, len = arr.length; i < len - 1; i++) { // 内层进行 n-1-i 次比较排序 for (var j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) _sort(arr, j, j + 1); } }}
function _sort(arr, i, j) { var t = arr[i]; arr[i] = arr[j]; arr[j] = t;}

优化版 (对部分区间已经有序的序列效果明显)
function bubbleSort(arr) { var len = arr.length, i = 0,
// 用来记录最后一位发生过 位置交换 的元素索引 lastSwappedIndex;
while (i < len - 1) { lastSwappedIndex = 0;
for (var j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { _sort(arr, j, j + 1); lastSwappedIndex = j + 1; } }
// 已经有序部分的元素个数 i = len - lastSwappedIndex; }}
function _sort(arr, i, j) { var t = arr[i]; arr[i] = arr[j]; arr[j] = t;}

注:以上代码演示仅供参考,具体应用请根据场景做调整!


以上是关于算法笔记系列:冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

图解算法系列之冒泡排序(优化版)

排序算法系列1--简单排序(选择,冒泡,直接插入)

排序算法系列:冒泡排序与双向冒泡排序

算法系列:冒泡排序法

图解算法系列之冒泡排序(Low版)

白话经典算法系列之一 冒泡排序的三种实现