冒泡排序

冒泡排序:从小到大 排序 或 从大到小 排序

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名 “ 冒泡排序 ” 。

我们给一个数组: [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 }

看一下运行结果:

 

 

 
posted @ 2022-03-14 18:37  我就尝一口  阅读(48)  评论(0编辑  收藏  举报