js 冒泡排序 与 选择排序

78 阅读2分钟

冒泡排序(Bubble Sort)

数组排序算法的一种, 数组排序就是把一个乱序的数组,经过我们的代码处理让他变成顺序的数组

逻辑:

冒泡排序的第一步就是把前两个数字拿出来进行比较,如果结果为false什么都不做, 如果结果为true, 那么交换两个数字的位置, 然后重复第一步的操作 ,每两两个数字都会进行比较,只要满足条件就进行交换,直至所有的数字都比较完毕,此时为一轮, 其他数字可能还是乱序, 但是最后一个数字一定是最大的数字

注意: 借助一个变量来帮助数组里面的两个数据进行交换

// 准备一个乱序的数组
    var arr = [9, 3, 7, 5, 2, 1, 4, 6, 8]
    console.log('原始数组: ', arr)
// 进行 length - 1轮的比较
    for(var i = 0; i < arr.length - 1; i++){
    //循环遍历数组,-i的原因是因为上一轮已经排列好了数组最后几个数字就没有比较的必要
      for(var j = 0; j < arr.length - 1 - i; j++){
      //依次比较当前和下一个数字
        if(arr[j] > arr[j + 1]){
        //条件为true的时候交换变量
          var temp = arr[j]
          arr[j] = arr[j + 1]
          arr[j + 1] = temp
        }
      }
    }
    console.log('交换后的数组: ',arr);

选择排序(Select Sort)

注意: 不要过多关注数据, 需要关注索引

var arr = [9, 6, 3, 1, 4, 7, 8, 2, 5];
console.log('原始数组: ', arr)
// 进行 length - 1轮的比较
for (var j = 0; j < arr.length; j++) {
    // 1. 假设最小数字的索引是: j ,此时数字j不是数据,而是索引j的位置
    var minIndex = j
    // 2. 遍历数组找到数组中最小的哪一项的下标将其替换之前记录的索引
    //初次循环遍历数组, 从索引j+1位置开始, 因为j=0时自己不需要和自己比
    for (var i = j; i < arr.length; i++) {
    //判断是不是比假设索引位置的数字小
        if (arr[i] < arr[minIndex]) {
        //如果条件为 true,那么替换 minIndex,循环结束后minIndex就保存最小数字的索引位置
            minIndex = i
        }
    }
    // 3. 遍历结束, 找到最小的索引, 交换假设最小数字索引位置 和 真实最小索引位置
    var temp = arr[j]
    arr[j] = arr[minIndex]
    arr[minIndex] = temp
}
console.log('排序结束后: ', arr)