可以通过上面这张图对冒泡排序有个简单的理解。 思想:将数组中的元素从头开始两两进行比较,如果比较中的两个元素第一个元素大于第二个元素,则两元素进行交换,最终,通过一趟比较,数组的最后一个元素就是所有元素中的最大值。同理,第二趟比较,会得到次大值。经过 n - 1 趟比较(n 为元素个数),会得到一个由小到大排列的有序数组。我们把每趟排序得到的最大值看作是冒出水面的泡泡的话,整个过程像是一个冒泡的过程。
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13
functionbubbleSort(arr) { for (let i = 0; i < arr.length - 1; i++) { for (let j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) { var temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } console.log(arr); return arr; }
第一趟扫描: i = 0,从第 0 个元素比较到第 n - i - 1 个元素,得出最大值 v1,索引为 n -1(最后一个元素), 有序序列为 [n - 1]; 第二趟扫描: i = 1,从第 0 个元素比较到第 n - i - 1 - 1 个元素,得出最大值 v2,索引为 n -2(最后一个元素), 有序序列为 [n - 2, n - 1]; 第 k 趟扫描: i = k - 1,从第 0 个元素比较到第 n - i - k 个元素,得出最大值 v2,索引为 n - k(最后一个元素), 有序序列为 [n - k, n - 1]; 当 k = n - 1 时,有序序列为 [1, n-1], 第 0 个元素自然为最小值, 整个排序过程结束;