冒泡排序法
冒泡排序法其实也是一种最简单,最清晰明了的一种排序算法。主要的运行过程就是重复比较一个数组里面的所有元素,两两做比较,如果他们的顺序不对,则把他们交换位置,一直重复到没有再需要交换元素就结束循环。之所以叫做冒泡,是因为最小的元素会在经过这些排序后慢慢的冒泡到数组的第一个位置,所以称之为冒泡排序法。
下面我们通过对一个数组使用冒泡排序法排序并输入来学习一下冒泡排序法的具体运行过程:
var arr = [10,50,98,2,40];
for(let i = 0; i < arr.length;i++){//外循环
for(let j = i+1; j < arr.length; j++){//内循环
if(arr[i] > arr[j]){
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
console.log('排序后的数组顺序为:',arr);
由以上代码我们可以看出,数组的元素本来的顺序是乱的,经过我们使用冒泡排序法再输出数组后,数组中的元素已按照由小到大排序好。
我们来详细看一下冒泡排序法的运行过程:
我们要先了解嵌套循环,也就是说外层循环循环一次,内层循环则需要根据内层循环的条件循环结束才会再次跳回外层循环进行外层循环的下一次循环,从我们的代码可以看出:
使用外层循环遍历数组的下标,数组的下标从0开始,到数组元素的个数-1结束,所以这里外循环的“i”需要小于我们数组元素的个数。然后是内层循环,这里的“j = i+1”的原因是第一个数组元素它本身不需要再和自己比较一次,所以就在“i”的基础仧加1,从第二个元素进行比较,当然内层循环条件也是要小于数组的长度的。然后进入循环开始判断:
第一次比较数组的第1个元素“10”和数组的第2个元素“50”,第三个元素“98”,第4个元素“2”,第5个元素“40”进行依次比较,定义一个临时变量temp用来存储数据,第一次,10和50比较,10不大于50,所以不仅如此if中的语句,继续10与98比较,if还是不满足,继续10与2比较,则将2和10交换位置,然后再用10和40比较,还是不满足if条件,第一次比较后的数组元素的顺序为[2,50,98,10,40]
这样内层循环结束,跳到外层循环,i++后i变成1,则拿到的元素是50,然后50开始与98比较,不满足if,50再与10比较,满足,则50和10交换位置,然后50和40比较,也满足条件,则50和40再交换位置,第二次比较后的数组元素顺序为[2,10,98,40,50];内层循环结束,继续下一次外层循环
i++变成2,则拿到元素是98,98与40比较满足条件,则98与40交换位置,然后98与50比较,也满足条件,98再与50交换位置,这次循环结束后数组元素的顺序为[2,10,40,50,98];
其实这里我们的数组元素顺序已经排好了,但是由于循环还没有结束,所以外层循环还会再继续执行2次之后才会停止,但进入循环后,数组的元素已经都不再满足if条件,因为顺序已经排好了。
等到循环结束,我们输出排序后的数组即可。这就是冒泡排序法的执行过程。