JS学习笔记七——数组排序

前言

数组排序指的是通过排序算法将数组从乱序变为有规律的顺序,数组排序分为很多种,其中包括了冒泡排序和选择排序。数组的相关知识可见数组具体介绍

一、冒泡排序

  1. 思路步骤
    (1)把数组的前两个数据拿出来比较,例如:使用大于比较运算符比较,若结果为 false,什么都不做,若结果为 true,则交换两个数字的位置,使得较小的数字位置靠前;
    (2)重复第一步操作,继续比较后面的数字,直到比较到最后的位置,表示一轮结束,此时,数组中最大的数字一定在最后一位;
    (3)重复第一轮操作,即第一、第二步,一轮结束后,此时,数组最后两个数字的顺序是正确的;
    (4)以此类推,重复 n 轮,总轮数为 数组长度 - 1;
    (5)由于每一轮都会从头到尾依次比较,而随着轮数增加,数组最后面的数据已经是有顺序的了,无需进行比较,因此在数组遍历时既要控制轮数,又要控制每轮比较的次数;

  2. 实现想法
    (1)使用 for 循环进行数组遍历,在一个 for 循环外嵌套一个新的 for 循环,让外部的 for 循环控制轮数,内部的 for 循环控制比较次数;
    (2)外部循环开始为 0 ,轮数为 数组长度 - 1,内部循环开始为 0,每轮的比较次数为 数组长度 - (轮数 - 1);
    (2)通过 if 语句比较数组里的两个数据;
    (3)需要交换位置时,借助一个变量(第三方)来进行数组里两个数据的交换;
    代码如下:

    // 乱序数组
    var arr = [9,3,4,8,1,5]
    // 循环遍历数组
    for (var i = 0; i < arr.length - 1; i++) {  // 控制轮数
        for (var j = 0; j < arr.length - 1 - i; j++) {  // 控制比较次数,此时的 i 为 轮数 - 1
            // 比较数据
            if (arr[j] > arr[j + 1]) {
                // 满足条件时进行数据交换
                var temp = arr[j]	// 第三方变量
                arr[j] = arr[j + 1]
                arr[j + 1] = temp
            }
        }
    }
    

二、选择排序

与冒泡排序不太相同,选择排序关注的重点不是数组中的每个数字,而是对应的索引,索引为 0 到(数组长度 - 1)。

  1. 思路步骤
    (1)假设最小数字的索引是 0,且将真实最小数字的索引也暂时看作 0;
    (2)从索引 1 位置开始,与真实最小数字索引位置的数字进行比较,若索引 1 位置的数字更小时,则更改真实最小数字的索引为 1,否则不变;
    (3)继续向后比较,重复第二步操作,直至比较完最后一个数字,第一轮完毕,此时,真实最小数字的索引对应的数字为数组中的最小值;
    (4)第一轮结束后,交换假设最小数字的索引位置和真实最小数字的索引位置,将数据进行交换,此时,数组中最小值到了数组最前方;
    (5)第二轮假设最小数字的索引是 1,且将真实最小数字的索引也暂时看作 1;
    (6)从索引 2 位置开始,重复第一轮的步骤,即第二、三、四步,使得第二个位置的数字为数组中第二小的数字;
    (7)以此类推,重复 n 轮,总轮数为 数组长度 - 1;

  2. 实现想法
    (1)使用 for 循环进行数组遍历,在一个 for 循环外嵌套一个新的 for 循环,让外部的 for 循环控制轮数,内部的 for 循环控制比较次数;
    (2)外部循环开始为 0 ,轮数为 数组长度 - 1,在外部循环内设置一个变量保存真实最小数字的索引值,设初始值为 轮数 - 1,内部循环开始为 轮数,每轮的比较次数为 数组长度 - 轮数;
    (2)通过 if 语句比较真实最小数字索引和假设最小数字索引对应的两个数据,假设最小数字索引为 轮数 - 1;
    (3)内部循环结束后,需要交换位置时,借助一个变量(第三方)来进行数组里两个数据的交换;
    代码如下:

    // 乱序数组
    var arr = [9,3,4,8,1,5,2]
    // 循环遍历数组
    for (var i = 0; i < arr.length - 1; i++) {  // 控制轮数
        var minIndex = i    // i 为 轮数 - 1
        for (var j = i + 1; j < arr.length; j++) {  // 控制比较次数
            // 比较数据
            if (arr[j] < arr[minIndex]) {
                // 满足条件时进行数据交换
                var temp = arr[j]	// 第三方变量
                arr[j] = arr[minIndex]
                arr[minIndex] = temp
            }
        }
    }
    

三、结语

本学习笔记主要用于记录博主个人的前端学习过程,目前学习资源来自b站千锋的前端1000集教学,如笔记内容有写错的地方,希望大家能够指出。同时,欢迎看到博文的小伙伴们与我一同学习!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值