1.原理
冒泡排序就是将一组打乱的数据,相互进行比较,然后根据大小重新调换位置,直至比较完成所有数据,这里有一个误区,很多人都理解为两个for循环去比较两个相同数组中的数据然后根据大小进行排序,其实它的指针只是一个for循环的数据,那么我们就直接从代码中来解释它的原理。
2.代码实现
const arr = [5, 4, 12, 18, 10, 30, 25];
const bubbleSort = (arr) => {
let num;
for (let i = 0; i < arr.length - 1; i++) {
for (j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j+1]) {
num = arr[j];
arr[j] = arr[j+1];
arr[j+1] = num;
}
}
}
return arr
}
console.log(bubbleSort(arr));
3.代码解析
一个for循环的作用实则是限制的循环比较的次数,arr.length - 1在这里也就是会执行比较6轮,
为什么是6轮,我们往下看,第二个for循环就来实现比较以及换位的操作:
第一轮开始,此时i等于0,那么j的取值最大就是arr.length - 2,就是数组的倒数第二位,j + 1就是倒数第一位,就等于说是j从0开始一直会比较到,倒数第二位和倒数第一位,那么最大的数肯定已经排在了这组数据的最后了;
那么到第二轮开始,i变成了1,这就意味着,j取值就小了以为,换句话说就是j从0开始比较到倒数第三个数和倒数第二个数,为什么这样呢,因为最大的数已经在最后了,所以每进行一轮比较,就会向前推一位;
那么按照这个原理,到最后i为arr.length - 2, 那怎么j从0开始到arr.length -1 - arr.length + 2 = 1,比较完成最后两个数,整个数据的排序已经完成。
那么现在我们在来理解6轮:第一轮j从0开始比较到最后一位,到最后一轮从0比较到第一位,那么第一位到最后一位(下标),就是一共6个元素,也可以理解为j一共可以为是那些元素:就是除了最后一个都可以,所以一共就是6轮。