冒泡排序
一组顺序混乱的数(即不分大小排列的数),让它的前一位数和后一位数依次进行比较,谁的
数大,就排在后面,谁的数小就排在前面,一轮比较8次,总共要进行8轮,排序后从小到大排列
冒泡排序
/*
外层循环与内层循环依次进行比较
var arr = [7 , 5 , 9 , 6 , 8 , 1 , 4 , 3 , 2];
索引:[0] [1] [2] [3] [4] [5] [6] [7] [8]
[0]与[1]、[2]、[3]、[4]、[5]、[6]、[7]、[8]进行比较
[1]与[2]、[3]、[4]、[5]、[6]、[7]、[8]进行比较
[2]与[3]、[4]、[5]、[6]、[7]、[8]进行比较
[3]与[4]、[5]、[6]、[7]、[8]进行比较
[4]与[5]、[6]、[7]、[8]进行比较
[5]与[6]、[7]、[8]进行比较
[6]与[7]、[8]进行比较
[7]与[8]进行比较
总共要比较8趟 每一次比较之后最小值都会被换在前面,所以比较的次数都会依次减少
*/
for(var i = 0; i < arr.length-1; i++){ //外层循环,进行比较的趟数
//
for(var j = i+1; j < arr.length-1-i; j++){ //外层循环与内层循环比较的次数
if(arr[i] > arr[j]){
//前一个数与后一个数进行比较,当前面数比后面数大时交换位置
var temp = arr[i];
arr[i] = arr[j];
arr[j] = arr[i];
}
}
}
console.log(arr);
选择排序
/*
默认一个最小值,将默认的最小值与后面的比较,如果后面的数据比最小值小,那么默认最小值与后面的数据交换位置
*/
var arr = [5, 8, 4, 6, 2, 1, 9, 3, 7];
for(var k = 0; k < arr.length; k++){
var minIndex = k;
//定义默认最小值索引=k,k为比较的前一个比较的索引 形如 => a[k] 与 a[i] 进行比较, i=k+1
for(var i = k + 1; i < arr.length; i++){
if(arr[minIndex] > arr[i]){ //判断前值是否比后值大
minIndex = i; //后值大 索引赋值给前值索引
}
}
var temp = arr[k]; //通过索引交换两值的位置
arr[k] = arr[minIndex];
arr[minIndex] = temp;
}
console.log(arr);
数组的塌陷现象
- i = 0 时 0被截取 截取后 数组的长度为5,1的索引下标为0,2的索引下标为1 =>[1, 2, 3, 4, 5]
- i = 1时 2被截取 截取后 数组长度为4 => [1, 3, 4, 5]
- i = 2时 4被截取 截取后 数组长度为3 => [1, 3, 5] => 不满足循环条件
//将arr数组里的数据清空
var arr = [0, 1, 2, 3, 4, 5];
// 索引 => [0][1][2][3][4][5]
console.log(arr);
for(var i = 0; i < arr.length; i++){
arr.splice(0,1);
}
console.log(arr);
//执行结果:
[1, 3, 5]
数组的塌陷现象解决方法
// 1.使i的值不变,始终为0
//将arr数组里的数据清空
var arr = [0, 1, 2, 3, 4, 5];
// 索引 => [0][1][2][3][4][5]
for(var i = 0; i < arr.length; i++){
arr.splice(0,1); //截取以索引0开始的一个数据
i--; //让经过自增成为1的i,自减成为0
}
console.log(arr);
//2.从数组末尾开始截取
var arr = [0, 1, 2, 3, 4, 5];
// 索引 => [0][1][2][3][4][5]
for(var i = arr.length-1; i >= 0; i--){
arr.splice(-5,1); //索引从末尾开始为负数
}
console.log(arr);