数组的for循环:
上篇文章说到数组可以通过索引获取到数组中的内容,可以参考JavaScript之数组的基础知识,刚好索引的排序是从0开始的,那么我们就可以通过for循环来循环数组,这种行为我们称为:遍历。
所谓遍历(Traversal),是指沿着某条搜索路线,依次对树(或图)中每个节点均做一次访问。访问结点所做的操作依赖于具体的应用问题, 具体的访问操作可能是检查节点的值、更新节点的值等。不同的遍历方式,其访问节点的顺序是不一样的。遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。当然遍历的概念也适合于多元素集合的情况,如数组。
第一种:
var arr = [8,5,3,1,7,2,9,6] //定义一个数组
for(var i=0;i<arr.length;i++){ //用for循环遍历数组,具体操作为:定义一个变量i,给它赋值为1,然后判断i是否小于数组的长度(因为 length就是数组的长度,是一个数值,所以我们可以直接用它来决定循环次数),true就执行下面打印代码后i自增,否则退出循环
console.log(arr[i]) //打印数组中索引为i的值,结果:数值会在控制台依次打印arr[0],arr[1],arr[2]...直到全部循环完毕
}
第二种:
var arr = [8,5,3,1,7,2,9,6] //定义一个数组
for(var i in arr){ //for in循环遍历是按照对象中有多少元素就执行多少次循环,i为我们定义的一个变量,每次循环一次相应的i就会对应当前元素的索引值
console.log(arr[i]) //打印数组中索引为i的值,结果:数值会在控制台依次打印
}
数组的排序:
排序:顾名思义,就是把一堆混乱的数据按照我们的规矩依次排序好。数组的排序就是让数组里面混乱的元素,有规律的排整齐。数组的排序分为两种:冒泡排序和选择排序。
冒泡排序:
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
var arr = [8,5,3,1,7,2,9,6] //定义一个无序数组
for(var j=0;j<=arr.length-1;j++){ 定义一个变量j表示循环数组的长度-1次
for(var i=0;i<=arr.length-1;i++){ //定义一个变量i表示循环数组的长度-1次
if(arr[i]>arr[i+1]){ //判断索引为i的值比索引为i+1的值大,则进行换位
var tmp = arr[i]; //定义一个变量tmp,给它赋值索引为i的元素
arr[i] = arr[i+1] //把索引为i的元素覆盖为索引为i+1的元素
arr[i+1] = tmp //再把tmp的值赋给索引为i+1的值
}
}
}
console.log(arr) //最后打印数组,结果:Array(8) [ 1, 2, 3, 5, 6, 7, 8, 9 ]
选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
//首先先输出最小值以及改变它的索引位置
var arr = [8,5,3,1,7,2,9,6] //定义一个数组
var minIndex = 0; //定义一个变量为最小值索引,假设索引为0的元素最小进行比较
for(var i=1;i<=arr.length-1;i++){ //for循环遍历所有元素
if(arr[minIndex] > arr[i]){ //if判断如果数组的第0位索引大于第1位索引就进行换位,依次判断
minIndex = i; //换位
}
}
//console.log(minIndex) //输出最小值的索引
//console.log(arr[minIndex]) //输出最小值
var tmp = arr[minIndex] //定义一个变量用于交换索引值,先把上面得到的最小值赋给tmp
arr[minIndex] = arr[0] //再把当时最小值跟第一位的值交换一下
arr[0] = tmp
//console.log(tmp) //输出tmp被赋予的最小值
console.log(arr[0]) //此时数组的第一位就是最小值,因为它的索引已经被跟之前的第一位值索引调换位置
//在上面的基础上,再套个for循环,让里面的元素都进行遍历排序
var arr = [8,5,3,1,7,2,9,6] //定义一个数组
for(var j=0;j<=arr.length-1;j++){ //定义一个for循环,循环次数为它的长度-1取索引值
var minIndex = j; //定义一个变量表示索引用来遍历数组
for(var i=j+1;i<=arr.length-1;i++){ //定义一个for循环,循环次数为它的长度-1,j+1变量赋值给i
if(arr[minIndex] > arr[i]){ //判断如果左边索引值的元素比右边索引值的元素大,则换位
minIndex = i;
}
}
var tmp = arr[minIndex] //定义一个变量用于交换索引值,先把上面得到的最小值赋给tmp
arr[minIndex] = arr[j] //再把当时最小值跟第一位的值交换一下
arr[j] = tmp
//console.log(tmp) //输出tmp被赋予的最小值
console.log(arr[j]) //此时数组的第一位就是最小值,因为它的索引已经被跟之前的第一位值索引调换位置
}
console.log(arr) //打印输出,结果为:Array(8) [ 1, 2, 3, 5, 6, 7, 8, 9 ]