冒泡排序:顧名思義就是氣泡從水中向外冒越來(lái)越大
基本思想:從左到右每次比較兩個(gè)相鄰的數(shù),大的往后移動(dòng),小的往前移動(dòng),這里有個(gè)易誤點(diǎn),每次向右移動(dòng)的過(guò)程中都是較大的數(shù)參與后續(xù)比較,最終的結(jié)果是得到最大的數(shù)排在最后面,要有逆向思維,他其實(shí)是從大到小排的,只不過(guò)將大數(shù)放在后面。
示例:例如一個(gè)數(shù)組[3,6,7,4,5],首先3和6比較,位置不變,然后右移一位,6和7比較仍然不變,再右移,7和4比較,7比4大,交換位置,再后移一位,7和5比較(前面一步7的位置后移一位了),7比5大,交換位置,第一輪循環(huán)下來(lái),得到的數(shù)組排序是[3,6,4,5,7],第二輪時(shí)仍然從左到右,只是沒(méi)有必要比較最后一個(gè)數(shù)了,因?yàn)樗亲畲蟮目隙ú挥媒粨Q位置,依次下去就得到第二大,第三大...
代碼如下:
function bubleSort (arr){
for(let i=0;i<arr.length-1;i++){ //第一層遍歷是計(jì)次,一共需要遍歷n-1論,和以往的遍歷計(jì)點(diǎn)不同
for(let j=0;j<arr.length-1-i;j++){ //第二層遍歷計(jì)點(diǎn),每次往后移動(dòng)一位,每增加一輪,就少比較一個(gè)已經(jīng)排好序的數(shù)
if(arr[j]>arr[j+1]){
[arr[j],arr[j+1]] = [arr[j+1],arr[j]]
}
}
}
return arr
}
注解以上是為了便于理解創(chuàng)造的術(shù)語(yǔ),并非官方術(shù)語(yǔ),計(jì)次和計(jì)點(diǎn)是我的理解意思,計(jì)次表示循環(huán)是次數(shù)的累加,計(jì)點(diǎn)是數(shù)據(jù)的位置后移,獲取新的數(shù)據(jù)