冒泡排序 选择排序 数组的塌陷现象

104 阅读2分钟

冒泡排序

一组顺序混乱的数(即不分大小排列的数),让它的前一位数和后一位数依次进行比较,谁的
数大,就排在后面,谁的数小就排在前面,一轮比较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);

数组的塌陷现象

  1. i = 0 时 0被截取 截取后 数组的长度为5,1的索引下标为0,2的索引下标为1 =>[1, 2, 3, 4, 5]
  2. i = 1时 2被截取 截取后 数组长度为4 => [1, 3, 4, 5]
  3. 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);