数组的选择排序
含义:是按照一定的规律把数组从小到大或者是从大到小的顺序帮我们排序好的一种方法,它也是计算机算法的一种。
//准备一个乱序的数组
var arr = [2,4,8,6,1,3,5,7];
var minIndex = 0//我们先假设这组数组中最小的那一项索引为0;
//也就是2假设为最小的
//循环遍历数组,从我们的索引为1的那一项开始,因为我们的0那一项假设为最小。
for(var i = 1;i < arr.length; i++){
//这里的i分别是索引为1,2,3,4,5,6,7,也就是除了我假设的最小的以外的所有索引。
if (arr[i] < arr[minIndex]){//只要有一项比我假设的数字小
minIndex = i // 就让它重新得到最小位置的索引
}
}
var tmp = arr[0];
arr[0] = arr[minIndex];
arr[minIndex] = tmp;//就让最小的数字和我假设的数字交换一下位置。
console.log(minIndex)//此时我们找到了我们的索引为4的数字比我们假设的数字小
console.log(arr)//我们的结果就是[1, 4, 8, 6, 2, 3, 5, 7]
我们可以看下代码的执行:
i === 1
arr[1] < arr[0] false
i === 2
arr[2] < arr[0] false
i === 3
arr[3] < arr[0] false
i === 4
arr[4] < arr[0] true 此时我们的 minIndex === 4
i === 5
arr[5] < arr[4] false
i === 6
arr[6] < arr[4] false
i === 7
arr[7] < arr[4] false
i === 8
循环结束
minIndex === 4 数组里面最小的哪个数字的索引
-------------------------当然我们可以重复的执行代码-------------------------------
//因为之前我们的第0项已经变成了最小的,所以我们要从索引为1的那一项开始
1.
var minIndex = 1;
for(var i = 2;i < arr.length; i++){//这里的i要变成索引第1个开始与索引为2的那一项比较
if (arr[i] < arr[minIndex]){
minIndex = i
}
}
//再次交换位置
var tmp = arr[1];
arr[1] = arr[minIndex];
arr[minIndex] = tmp;
2.
var minIndex = 2;
for(var i = 3;i < arr.length; i++){//索引为2的一项与索引为3的相比较
if (arr[i] < arr[minIndex]){
minIndex = i
}
}
//再次交换位置
var tmp = arr[2];
arr[2] = arr[minIndex];
arr[minIndex] = tmp;
...............//继续一直循环下去也能完成我们的目标
根据上面执行结束代码后我们可以发现执行代码还是有规律的,我们可以罗列出我们的代码运行规律,因为我们一直循环我们的代码,会占用我们的执行效率,我们可以优化代码。
运行第几次 :1,2,3,4,5,6,7;
假设哪个索引上数字最小:0,1,2,3,4,5,6;
从几开始循环 :1,2,3,4,5,6,7;
minIndex 和几交换:0,1,2,3,4,5,6;
由此推出:
for (var j = 1; j 就是运行第几次;
// 假设最小数字的索引-1;
var minIndex = j - 1;
// 循环数组
for (var i = j; i < arr.length; i++) {
if (arr[i] < arr[minIndex]) {
minIndex = i
}
}
// 交换位置
var tmp = arr[j - 1];
arr[j - 1] = arr[minIndex];
arr[minIndex] = tmp;
}
console.log(arr)//[1, 2, 3, 4, 5, 6, 7, 8]