简单解析JavaScript中数组的冒泡排序和选择排序

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 简单解析JavaScript中数组的冒泡排序和选择排序上篇博客我们讲解了数组的sort()方法,这篇博客我们来讲一下数组的另外两种排序方法:冒泡排序和选择排序。其中冒泡排序在前端面试中笔试部分经常会被问到。1.冒泡排序冒泡排序:简单解释,就是相邻两元素之间两两比较,比较出大值进行赋值互换,再依次与相邻的元素比较,层层递进互换元素位置,相互赋值,最后得出排序的结果。在这里插入图片描述 var arr = [100, 20, 9, 3, 22, 111, 28, 55]; // js数组的冒泡排序 // var arr=[1,2,3,4] // 第一层

简单解析JavaScript中数组的冒泡排序和选择排序




上篇博客我们讲解了数组的sort()方法,这篇博客我们来讲一下数组的另外两种排序方法:冒泡排序和选择排序。其中冒泡排序在前端面试中笔试部分经常会被问到。


1.冒泡排序


冒泡排序:简单解释,就是相邻两元素之间两两比较,比较出大值进行赋值互换,再依次与相邻的元素比较,层层递进互换元素位置,相互赋值,最后得出排序的结果。


图片.png

在这里插入图片描述

vararr= [100, 20, 9, 3, 22, 111, 28, 55];
// js数组的冒泡排序// var arr=[1,2,3,4]// 第一层for循环  遍历数组项for (vari=0; i<arr.length; i++) {
// console.log(arr[i]);// 第二层for循环 进行数组项的相互比较for (varj=0; j<arr.length-i-1; j++) {
if (arr[j] >arr[j+1]) {
vark;
k=arr[j];
arr[j] =arr[j+1];
arr[j+1] =k;
            }
        }
console.log(arr);
    }
// 对方法进行封装functionbubble(arr) {
for (vari=0; i<arr.length; i++) {
// console.log(arr[i]);// 第二层for循环 进行数组项的相互比较for (varj=0; j<arr.length-i-1; j++) {
if (arr[j] >arr[j+1]) {
vark;
k=arr[j];
arr[j] =arr[j+1];
arr[j+1] =k;
                }
            }
        }
returnarr;
    }
console.log(bubble(arr));


当然上面的方法是进行升序排列,降序排序只需要简单修改:

functionbubble(arr) {
for (vari=0; i<arr.length; i++) {
// console.log(arr[i]);// 第二层for循环 进行数组项的相互比较for (varj=0; j<arr.length-i-1; j++) {
if (arr[j] <arr[j+1]) {
vark;
k=arr[j];
arr[j] =arr[j+1];
arr[j+1] =k;
                }
            }
        }
returnarr;
    }
console.log(bubble(arr));    

总结:冒泡排序主要是要分清每一层for循环的作用是什么。同时还要知道如何将两个变量的值互换。


vara=10;
varb=20;
varc;
c=a;//10a=b;//20b=c;//10

2.选择排序


选择排序:先定义一个元素的最大值或最小值,然后将每个数组项与最值比较,取大值放到元素最右端,层层比较,互换元素下标位置,再赋值,此方法比冒泡排序的效率高。

vararr= [100, 20, 9, 3, 22, 111, 28, 55];
functionchose(arr) {
for (vari=0; i<arr.length-1; i++) {
// 假设最大值varmaxone=i;
for (varj=i+1; j<arr.length; j++) {
if (arr[j] >arr[maxone]) {
maxone=j;
                }
            }
vartemp=arr[i];
arr[i] =arr[maxone];
arr[maxone] =temp;
        }
returnarr;
    }
console.log(chose(arr));// [111, 100, 55, 28, 22, 20, 9, 3]   


视频讲解链接:
1.https://www.bilibili.com/video/BV1jC4y1p7oW/
2.https://www.bilibili.com/video/BV1az4y1d7Bm/

相关文章
|
3天前
|
JavaScript 索引
Vue.js的`v-for`用于基于数组或对象渲染列表,如遍历数组生成`&lt;li&gt;`元素
【6月更文挑战第25天】Vue.js的`v-for`用于基于数组或对象渲染列表,如遍历数组生成`&lt;li&gt;`元素。基本语法是`v-for=&quot;(item, index) in items&quot;`,支持遍历对象的键值对。注意与`v-if`同用时应使用`&lt;template&gt;`,组件上使用`v-for`需设`key`属性以优化性能。
12 2
|
1天前
|
JavaScript 前端开发
技术经验分享:javaScript遍历对象、数组总结
技术经验分享:javaScript遍历对象、数组总结
技术经验分享:javaScript遍历对象、数组总结
|
3天前
|
JavaScript 索引
JS判断数组是否包含某个元素
JS判断数组是否包含某个元素
7 1
|
6天前
|
存储 JavaScript 前端开发
JavaScript中的数组是核心数据结构,用于存储和操作序列数据
【6月更文挑战第22天】JavaScript中的数组是核心数据结构,用于存储和操作序列数据。创建数组可以使用字面量`[]`或`new Array()`。访问元素通过索引,如`myArray[0]`,修改同样如此。常见方法包括:`push()`添加元素至末尾,`pop()`移除末尾元素,`shift()`移除首元素,`unshift()`添加到开头,`join()`连接为字符串,`slice()`提取子数组,`splice()`进行删除、替换,`indexOf()`查找元素位置,`sort()`排序数组。还有其他如`reverse()`、`concat()`等方法。
15 2
|
9天前
|
JavaScript 前端开发 算法
【JavaScript】JavaScript 垃圾回收机制深度解析:内存管理的艺术
JavaScript的内存管理和垃圾回收机制涉及栈内存与堆内存、引用计数与标记-清除算法。栈内存存储基本类型和函数调用时的局部变量,而堆内存用于复杂数据类型,如对象和数组。垃圾回收主要通过标记-清除策略,处理不再被引用的对象。现代引擎如V8使用分代收集和增量标记等优化方法,减少停顿并提升性能。开发者应注意避免内存泄漏,如及时解除引用、管理DOM引用和定时器,使用WeakMap和WeakSet等。理解这些原理和最佳实践对于编写高效代码至关重要。
21 5
|
7天前
|
JavaScript 前端开发
记录Javascript数组类练习
记录Javascript数组类练习
9 1
|
2天前
|
存储 前端开发 JavaScript
JavaScript 数组魔法阵:解锁数据的无限潜能
JavaScript 数组魔法阵:解锁数据的无限潜能
|
3天前
|
JavaScript 索引
JS数组常用方法总结,含ES6新方法,附示例代码
JS数组常用方法总结,含ES6新方法,附示例代码
|
3天前
|
存储 JavaScript 前端开发
JavaScript——JavaScript基础:数组 | JavaScript函数:使用、作用域、函数表达式、预解析
在JavaScript中,内嵌函数可以访问定义在外层函数中的所有变量和函数,并包括其外层函数能访问的所有变量和函数。①全局变量:不在任何函数内声明的变量(显式定义)或在函数内省略var声明的变量(隐式定义)都称为全局变量,它在同一个页面文件中的所有脚本内都可以使用。函数表达式与函数声明的定义方式几乎相同,不同的是函数表达式的定义必须在调用前,而函数声明的方式则不限制声明与调用的顺序。③块级变量:ES 6提供的let关键字声明的变量称为块级变量,仅在“{}”中间有效,如if、for或while语句等。
20 0

推荐镜像

更多