vlambda博客
学习文章列表

算法笔记系列:冒泡排序

冒泡排序
一种型的简单的稳定排序算法。因在排序过程中,目标元素会像“气泡”一样从序列中“浮动”到期望的位置,故得此名。
实现原理 :遍历待排序的数据,并依次比较其中两个相邻的元素,如果两者之间的顺序是逆位的,则进行交换操作 (在第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;}

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