1、比较相邻的两个元素,如果前一个比后一个大,则交换位置。
2、比较完第一轮的时候,最后一个元素是最大的元素。
3、这时候最后一个元素是最大的,所以最后一个元素就不需要参与比较大小。
假设数组中有n个数,则需要n轮,而每一轮中比较的次数都要减去已经确定的数值,即第i轮需要比较的次数为:n-i,可以用一个嵌套for循环来实现
直接上代码,先看一下整体代码
1 var arr1 = [10,1,78,2,45,24,36]; 2 let Sort = (arr) => { 3 for (i = 0; i < arr.length - 1; i++) { 4 for (j = 0; j < arr.length - i - 1; j++) { 5 if (arr[j] > arr[j + 1]) { 6 let swap = arr[j] 7 arr[j] = arr[j + 1] 8 arr[j + 1] = swap 9 } 10 } 11 } 12 return arr 13 }
再看一下代码注释,为了更好的看清楚排序过程,我们将每一次排序的结果在控制台输出
1 var arr1 = [10, 1, 78, 2, 45, 24, 36]; //创建待排序数组 2 let Sort = (arr) => { //sort(排序) 3 console.log("原始数据:" + arr1) //原始数据 4 for (i = 0; i < arr.length - 1; i++) { //外层循环控制循环多少趟,当每执行 5 for (j = 0; j < arr.length - i - 1; j++) { //内层循环控制每趟循环多少次 6 if (arr[j] > arr[j + 1]) { //if第一项大于第二项执行代码 7 let swap = arr[j] //swap(互换) 将arr[j]的值放在swap的变量中 8 //swap是临时开辟的空间,若不定义变量直接arr[j] = arr[j + 1],那么会直接把arr[j+1]的值给覆盖掉 9 arr[j] = arr[j + 1] //再将下标1的45放在下标2的24的位置上 10 arr[j + 1] = swap //将下标为2的24再赋值给swap就形成了[1,24,45],再依次往后执行判断 11 } 12 } 13 console.log("第" + i + "次排序" + arr) 14 } 15 return arr 16 } 17 console.log("最终排序:" + arr1) 18 console.log(Sort(arr1)); //[1, 2, 10, 24, 36, 45, 78]
可以清楚的看到,通过6次排序得到了最终有小到大排列的数组。这样我们就是实现了冒泡排序的算法
原文:https://www.cnblogs.com/grayson0626/p/14930975.html