-
原理
假如为升序排列,数组长度为n,如果「第1个数」大于「第2个数」,则将两者交换位置,反之位置不动。然后比较「第2个数」和「第3个数」,直到比较最后两个数,这样一轮下来,n个数中「最大的数」就会处在数组的最后一个位置上。
然后我们运用此比较方法,来比较除了排好位置的n-1个数字,然后又比较出这n-1个数字中「最大的数字」放在这n-1个数字的最后位置(也就是第n-1那个位置)。以此类推,直到所有数字排序完毕。 -
举例
[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就排好位置了。然后依次排好剩余的数字。
- 代码
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;
}
网友评论