前端数组排序冒泡排序;选择排序;插入排序

冒泡排序: 重复访问数列,一次比较相邻两个元素,如果前一个元素比后一个元素大,那么交换他们的顺序,多次交换之后得出正确排序。

假设有这样一个数组[7, 3, 6, 1, 9, 2, 5, 4, 0, 8],使用冒泡排序进行排序,每次循环从最后一个元素开始,相邻的两个元素进行比较,如果前一个元素大于后一个元素,则两者互换

第一次排序的结果为[7, 3, 6, 1, 9, 2, 5, 4, 0, 8],其实就是把最小的元素0放到数组的第一个

第二次排序的结果为[0, 1, 7, 3, 6, 2, 9, 4, 5, 8],其实就是把第二小的元素1放到数组的第二个

第三次排序的结果为[0, 1, 2, 7, 3, 6, 4, 9, 5, 8],其实就是把第三小的元素3放到数组的第三个

以此类推即可得出最终结果

sortArray:[7, 3, 6, 1, 9, 2, 5, 4, 0, 8]
//冒泡排序
for (let i = 0; i < this.sortArray.length; i++) {
     for (let j = this.sortArray.length - 1; j > i; j--) {
          if (this.sortArray[j] < this.sortArray[j - 1]) {
                let temp = this.sortArray[j];
                this.sortArray[j] = this.sortArray[j - 1];
                this.sortArray[j - 1] = temp;
           }
      } 
}

console.info(this.sortArray);//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

选择排序:每一次从待排序的数列中选出最大或最小的元素放到起始位置

假设有数组[3, 7, 6, 1, 9, 2, 5, 4, 0, 8],选择排序每次循环会假设一个最小值,然后找到真正的最小值再与其交换。

我们假设数组中最小的元素为第一个元素3,经过第一次排序发现真正最小的是最后一个元素0, 第一次排序的结果为[0, 7, 6, 1, 9, 2, 5, 4, 3, 8]

我们假设数组中最小的元素为第二个元素7,经过第二次排序发现真正最小的是第四个元素1,所以第二次排序的结果为[0, 1, 6, 7, 9, 2, 5, 4, 3, 8]

我们假设数组中最小的元素为第3个元素6,经过第二次排序发现真正最小的是最后一个元素3,所以第三次排序的结果为[0, 1, 2, 7, 9, 6, 5, 4, 3, 8]

//选择排序
for (let i = 0; i < this.sortArray.length; i++) {
     // 假设最小值的下标为i
     let min = i;
     // 查找当次循环中真正的最小值下标
    for (let j = i + 1; j < this.sortArray.length; j++) {
        if (this.sortArray[min] > this.sortArray[j]) {
             min = j;
         }
    }
    // 交换
    let temp = this.sortArray[i];
    this.sortArray[i] = this.sortArray[min];
    this.sortArray[min] = temp;
}
console.info(this.sortArray);//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

插入排序:

可以把插入算法想象成一个拔萝卜的游戏,有一串萝卜[3, 7, 6, 1, 9, 2, 5, 4, 0],使用插入排序进行排序。

第一次排序,把萝卜7拔出来,因为萝卜3比萝卜7要小,所以把萝卜3放到萝卜7前面,结果就为[3, 7, 6, 1, 9, 2, 5, 4, 0, 8]

第二次排序,把萝卜6拔出来,因为萝卜6大于萝卜3,但是萝卜6小于萝卜7,所以把萝卜6放在萝卜3后面,萝卜7前面,结果为[3, 6, 7, 1, 9, 2, 5, 4, 0, 8]

第三次排序,把萝卜1拔出来,因为萝卜1小于萝卜3,所以把萝卜1放到萝卜3前面,结果为[1, 3, 6, 7, 9, 2, 5, 4, 0, 8]

按照以上规律以此类推即可得到最终排序[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

let array = [3, 7, 6, 1, 9, 2, 5, 4, 0, 8];
    for (let i = 1; i < array.length; i++) {
         let j;
         let temp = array[i];
         for (j = i; j > 0 && array[j - 1] > temp; j--) {
             array[j] = array[j - 1];
         }
         array[j] = temp;
}
console.log(array);//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

猜你喜欢

转载自blog.csdn.net/Sunny_lxm/article/details/103309120
今日推荐