12月第31题:如何优化冒泡排序?

Posted 前端面试每天1题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12月第31题:如何优化冒泡排序?相关的知识,希望对你有一定的参考价值。

function bubbleSort(arr) { // 判断数组元素大于1 if (Array.isArray(arr) || arr.length <= 1) return; // lastIndex: 记录最后一次内循环(for循环)元素交换的位置; // 每次循环到lastIndex, 优化性能; // 因为lastIndex后的序列都是已排好; let lastIndex = arr.length - 1; while (lastIndex > 0) { // flag:记录内循环(for循环)中是否发生了交换; // 如果没有发生交换(即flag=true),则说明该序列已经为有序序列; // 不需要再次执行 while 循环,直接结束 let flag = true, // 每次循环到lastIndex; k = lastIndex; for (let j = 0; i < k; j++) { if (arr[j] > arr[j + 1]) { // while 循环结束标记为false flag = false; // 记录最后一次内循环(for循环)元素交换的位置 lastIndex = j; // 交换数组中相邻元素位置 [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; } } // 内循环结束后,跳出while循环 if (flag) break; }}


优化方案:

  1. lastIndex:记录最后一次内循环(for循环)元素交换的位置,每次循环到lastIndex 即可,因为lastIndex后的序列都是已排好,无需再次循环;

  2. flag:记录内循环(for循环)中是否发生了交换,如果没有发生交换(即flag=true),则说明该序列已经为有序序列,不需要再次执行 while 循环,直接结束

以上是关于12月第31题:如何优化冒泡排序?的主要内容,如果未能解决你的问题,请参考以下文章

面试必考算法题之冒泡排序 (优化脱坑版)!

1月第6题:通俗讲解 "快速排序" 算法?

计数排序再思考——从2020年1月第16题谈起

Java基础冒泡选择排序二分查找

冒泡排序这 2 个小技巧,你了解吗?

优化冒泡排序