排序算法的核心思想是:對一組數(shù)據(jù)按照一定的順序重新排列。重新排列時用到的技術(shù)是一組嵌套的 for 循環(huán)蹬敲。其中外循環(huán)會遍歷數(shù)組的每一項暇昂,內(nèi)循環(huán)則用于比較元素。
幾個概念
1伴嗡、時間復(fù)雜度:一個算法執(zhí)行所耗費的時間
2急波、空間復(fù)雜度:運行完一個程序所需內(nèi)存的大小
3、穩(wěn)定指:如果a=b,a在b的前面闹究,排序后a仍然在b的前面
4幔崖、不穩(wěn)定指:如果a=b食店,a在b的前面渣淤,排序后可能會交換位置
一赏寇、冒泡排序
這是最慢的排序算法之一,但也是一種最容易實現(xiàn)的价认。
數(shù)值會像氣泡一樣從數(shù)組的一端漂浮到另一端嗅定。之所以會產(chǎn)生這種現(xiàn)象是因為算法會多次在數(shù)組中移動,比較相鄰數(shù)據(jù)用踩,當(dāng)左側(cè)值大于右側(cè)值時將他們進(jìn)行互換渠退。
1、平均時間復(fù)雜度:O(n*n)【最好情況O(n)脐彩、最差情況O(n*n)】
2碎乃、空間復(fù)雜度O(1)
3、穩(wěn)定性:穩(wěn)定
一個實現(xiàn)過程例子:
E A D B H
A E D B H
A D E B H
A D B E H
A B D E H
實現(xiàn)方法一:
當(dāng)i=0的時候惠奸,里面的循環(huán)完整執(zhí)行梅誓,從j=0執(zhí)行到j(luò)=6,這也就是第一遍排序,結(jié)果是將最大的數(shù)排到了最后佛南,這一遍循環(huán)結(jié)束后的結(jié)果應(yīng)該是[8,15,88,55,76,21,39,94]
當(dāng)i=1的時候梗掰,里面的循環(huán)再次完整執(zhí)行,由于最大的數(shù)已經(jīng)在最后了嗅回,沒有必要去比較數(shù)組的最后兩項及穗,這也是j
即每次將剩下數(shù)組里面最大的一個數(shù)排到最后面,當(dāng)?shù)谝粋€循環(huán)執(zhí)行到最后的時候绵载,也就是i=6,此時埂陆,j=0,只需要比較數(shù)組的第一和第二項,比較完畢尘分,返回猜惋。
實現(xiàn)方法二:
外層的for循環(huán)采用遞減的方式,當(dāng)outer=2的時候只有兩個元素需要比較了培愁,則執(zhí)行最后一次比較著摔。
二、選擇排序
從數(shù)組的開頭開始定续,將第一個元素和其他元素進(jìn)行比較谍咆。檢查完所有元素后,最小的元素被放到數(shù)組的第一個位置私股。