冒泡排序
冒泡排序:从小到大 排序 或 从大到小 排序
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名 “ 冒泡排序 ” 。
我们给一个数组: [9, 5, 8, 6, 4, 2]
[9, 5, 8, 6, 4, 2] // i = 0, j = 6 - 1 - 0。 把 9 从第一个交换到最后一个,总共比较了 5 次
[5, 9, 8, 6, 4, 2]
[5, 8, 9, 6, 4, 2]
[5, 8, 6, 9, 4, 2]
[5, 8, 6, 4, 9, 2]
[5, 8, 6, 4, 2, 9]
[5, 8, 6, 4, 2, 9] // i = 1, j = 6 - 1 - 1 。把 8 交换到倒数第 2 个,因为 9 已经是最大的排好序了,只需要比较 4 次
[5, 8, 6, 4, 2, 9]
[5, 6, 8, 4, 2, 9]
[5, 6, 4, 8, 2, 9]
[5, 6, 4, 2, 8, 9]
[5, 6, 4, 2, 8, 9] // i = 2, j = 6 - 1 - 2。 把 6 交换到倒数第三个,8 和 9 已经排好序了,比较 3 次
[5, 6, 4, 2, 8, 9]
[5, 4, 6, 2, 8, 9]
[5, 4, 2, 6, 8, 9]
[5, 4, 2, 6, 8, 9] // i = 3, j = 6 - 1 - 3。 比较 2 次
[4, 5, 2, 6, 8, 9]
[4, 2, 5, 6, 8, 9]
[4, 2, 5, 6, 8, 9] // i = 4, j = 6 - 1 - 4 比较 1 次
[2, 4, 5, 6, 8, 9]
1 function bubbleSort(arr) { 2 for (let i = 0; i < arr.length; i++) { // i = 0 1 2 3 4 3 for (let j = 0; j < arr.length - 1 - i; j++) { // j = 5 4 3 2 1 4 if (arr[j] > arr[j+1]) { 5 let temp = arr[j]; 6 arr[j] = arr[j+1]; 7 arr[j+1] = temp; 8 } 9 } 10 11 } 12 }
看一下运行结果:
生活是痛苦的白天,死亡是凉爽的夜晚。