前言
数组排序指的是通过排序算法将数组从乱序变为有规律的顺序,数组排序分为很多种,其中包括了冒泡排序和选择排序。数组的相关知识可见数组具体介绍
一、冒泡排序
-
思路步骤
(1)把数组的前两个数据拿出来比较,例如:使用大于比较运算符比较,若结果为 false,什么都不做,若结果为 true,则交换两个数字的位置,使得较小的数字位置靠前;
(2)重复第一步操作,继续比较后面的数字,直到比较到最后的位置,表示一轮结束,此时,数组中最大的数字一定在最后一位;
(3)重复第一轮操作,即第一、第二步,一轮结束后,此时,数组最后两个数字的顺序是正确的;
(4)以此类推,重复 n 轮,总轮数为 数组长度 - 1;
(5)由于每一轮都会从头到尾依次比较,而随着轮数增加,数组最后面的数据已经是有顺序的了,无需进行比较,因此在数组遍历时既要控制轮数,又要控制每轮比较的次数; -
实现想法
(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)假设最小数字的索引是 0,且将真实最小数字的索引也暂时看作 0;
(2)从索引 1 位置开始,与真实最小数字索引位置的数字进行比较,若索引 1 位置的数字更小时,则更改真实最小数字的索引为 1,否则不变;
(3)继续向后比较,重复第二步操作,直至比较完最后一个数字,第一轮完毕,此时,真实最小数字的索引对应的数字为数组中的最小值;
(4)第一轮结束后,交换假设最小数字的索引位置和真实最小数字的索引位置,将数据进行交换,此时,数组中最小值到了数组最前方;
(5)第二轮假设最小数字的索引是 1,且将真实最小数字的索引也暂时看作 1;
(6)从索引 2 位置开始,重复第一轮的步骤,即第二、三、四步,使得第二个位置的数字为数组中第二小的数字;
(7)以此类推,重复 n 轮,总轮数为 数组长度 - 1; -
实现想法
(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集教学,如笔记内容有写错的地方,希望大家能够指出。同时,欢迎看到博文的小伙伴们与我一同学习!