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

可以清楚的看到,通过6次排序得到了最终有小到大排列的数组。这样我们就是实现了冒泡排序的算法

浙公网安备 33010602011771号