冒泡排序

2018-11-25  本文已影响0人  Jason_Shu
  1. 原理
    假如为升序排列,数组长度为n,如果「第1个数」大于「第2个数」,则将两者交换位置,反之位置不动。然后比较「第2个数」和「第3个数」,直到比较最后两个数,这样一轮下来,n个数中「最大的数」就会处在数组的最后一个位置上。
    然后我们运用此比较方法,来比较除了排好位置的n-1个数字,然后又比较出这n-1个数字中「最大的数字」放在这n-1个数字的最后位置(也就是第n-1那个位置)。以此类推,直到所有数字排序完毕。

  2. 举例

[10, 34, 21, 47, 3, 28]

比较10和34,34>10不用调换位置,然后比较34和21,由于34>21, 两者调换位置,数组变成:

[10, 21, 34, 47, 3, 28]

然后比较34和47,两者不调换位置。比较47和3,两者调换位置,数组变成:

[10, 21, 34, 3, 47, 28]

比较47和28,两者调换位置,数组变成:

[10, 21, 34, 3, 28, 47]

这样一轮下来,数组中最大的数字47就排好位置了。然后依次排好剩余的数字。

  1. 代码
function bubleSort(arr) {
    for(let i=0; i < arr.length - 1; i ++) {    // 这层是轮次循环
        for(let j = 0; j < arr.length - 1 - i; j++) {   //  代表当前轮选中的元素的下标
            if(arr[j] > arr[j+1]) {
                [ arr[j], arr[j+1]] = [arr[j+1], arr[j]];
            }
        }
    }
    return arr;
}

参考:https://zhuanlan.zhihu.com/p/45501356

上一篇 下一篇

猜你喜欢

热点阅读