要知道哪個效率高就要知道他們的排序比較方式有什麼不同,我們先來比較一下!
例:
如要將數組:[12,14,26,5,8] 按升序排列成:[5,8,12,14,26]
選擇排序:
第一趟:將第一個數與第二個數相比較;若第二個數較小,則第一個數與第二個數交換,否則不變;
再將第一個數與第三個數比較,若第三個數較小,則交換,否則不變;
依此類推,則第一趟排序時各數據所處位置應是:
初始:12,14,26,5,8
第一次比較後:12,14,26,5,8
(注:第一次比較後,因12<14,故不變)
第二次比較後:12,14,26,5,8
(注:第二次比較後,因12<26,故不變)
第三次比較後:5,14,26,12,8
(注:第三次比較時,12是第一位數,與第四位數5相比較)
第四次比較後:5,14,26,12,8
(注:第四次比較後,因8>5,故不變)
第二趟排序時,因首位數字5己是最小數,且排在第一位,就可以不再管它了,就只需對數組:[14,26,12,8] 進行排序,具體過程同上面一樣。
冒泡排序:
首先將處於第一位置的數與處第二位置的數相比較,若第二位置的數較小,則交換,否則不變;此處,因14>12,故不變。
然後將第二位置的數與第三位置的數比較,若後者較小,則交換,否則不變;此例中,因14<26,故不變。
再將第三位置的數與第四位置的數比較,若後者小,則交換,否則不變;此例中,因5<26,故交換; 交換後,26為新的第四位置數。
依此類推,將第四位置數與第五位置數相比較,即完成了第一趟排序。
第一趟排序過程中各數據位置:
初始:12,14,26,5,8
第一次比較後:12,14,26,5,8
第二次比較後:12,14,26,5,8
第三次比較後:12,14,5,26,8
第四次比較後:12,14,5,8,26
第二趟排序與第一趟排序類似,只是所需排的數組是:[12,14,5,8] 因最後一個數字己經是最大,且排在最後,故不再管它。
通過上面的實例應該知道,選擇排序是每一個都比較(絕對比較);而冒泡法是相對的比較,它是相對之前的數比較;如果有一組排好序的數組 [1,2,3,4,5,6] 再用選擇排序法和冒泡法,那肯定是冒泡法先執行完,因為冒泡法只要執行一趟(運用相對比較),而選擇要執行五趟(用的是絕對比較);從這就可以看出冒泡法比選擇排序法的效率要高!