选择排序
=>先假定数组中的第0个就是最小的数字的索引
=>然后遍历数组,只要有一个数字比我小,那么替换我之前记录的索引
=>直到数组遍历结束后,就能找到最小的那个索引,然后让最小的索引换到第0个位置
=>再来第二遍遍历,假定第1个是最小的那个数字的索引
=>再遍历一次数组,找到比我小的那个数字的索引
=>遍历结束后换个位置
=>以此类推,也可以把数组排序好
// 1 先准备一个乱序的数组
var arr = [3, 1, 5, 6, 4, 9, 7, 2, 8];
// 2 假定数组中的第0个是最小的那个数字的索引
var minIndex = 0
// 3 遍历数组,判断,只要数字比我小,那么就替换掉原来记录的索引
for(var i = 0;i<arr.length;i++){
if(arr[i]<arr[minIndex]){
minIndex = i;
}
}
//4 遍历结束以后,让第minIndex个和第0个交换
var temp = arr[minIndex];
arr[minIndex] = arr[0];
arr[0] = temp;
// 5 按照数组的长度重复执行上面的代码
for (var j = 0; j < arr.length; j++) {
//假定数组中第j个是最小的数字的索引
var minIndex = j;
// 遍历数组,判断,只要数字比我小,那么就替换掉原来记录的索引
//自己不和自己比 而是和后面的相比所以是j+1
for (var i = j + 1; i < arr.length; i++) {
if (arr[i] < arr[minIndex]) {
minIndex = i;
}
}
// 遍历结束以后,让第minIndex个和第j个交换
var temp = arr[j];
arr[j] = arr[minIndex];
arr[minIndex] = temp;
}
console.log(arr)
下面进行优化:
优化点1.
倒数第二次换完位置,其实就排好了,所以可以把j<arr.length改成j<arr.length-1
优化点2:
如果遍历结束以后发现minIndex就是等于j,就不用换
for (var j = 0; j < arr.length - 1; j++) {
//优化点2:倒数第二次换完位置,其实就排好了,所以可以把j<arr.length改成j<arr.length-1
var minIndex = j;
// 遍历数组,判断,只要数字比我小,那么就替换掉原来记录的索引
for (var i = j + 1; i < arr.length; i++) {
if (arr[i] < arr[minIndex]) {
minIndex = i;
}
}
// 遍历结束以后,让第minIndex个和第j个交换
// 优化点1:如果遍历结束以后发现minIndex就是等于j,就不用换
if (minIndex != j) {
var temp = arr[minIndex];
arr[minIndex] = arr[j];
arr[j] = temp;
}
}