7.8希爾排序
首先請各位艦長們停止你們的聯(lián)想,好好學習嗷!
內容來自尚硅谷Java數(shù)據(jù)結構與java算法(Java數(shù)據(jù)結構與算法)_嗶哩嗶哩_bilibili
寫在前面:本文內容大致和原視頻內老師的筆記內容相同,會偶爾插入自己的注釋和理解,盡量會完成作業(yè)
7.8希爾排序
7.8.1簡單插入排序存在的問題
看看簡單的插入排序可能存在的問題
數(shù)組 arr = {2,3,4,5,6,1} 這時需要插入的數(shù) 1(最小) 這樣的過程是
1被保存
arr = {2,3,4,5,6,6}
arr = {2,3,4,5,5,6}
arr = {2,3,4,4,5,6}
arr = {2,3,3,4,5,6}
arr = {2,2,3,4,5,6}
arr = {1,2,3,4,5,6}
結論:當需要插入的數(shù)是較小的數(shù)時,后移的次數(shù)明顯增多,對效率有影響
7.8.2希爾排序法介紹
希爾排序是希爾(Donald Shell)于1959年提出的一種排序算法。希爾排序也是一種插入排序,它是簡單插入排序經過改進之后的一個更高效的版本,也稱為縮小增量排序。
7.8.3希爾排序法的基本思想
希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序算法排序;隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個文件恰被分成一組,算法便終止
7.8.4希爾排序法的示意圖


7.8.5希爾排序法的應用實例
{8,9,1,7,2,3,5,4,6,0} 請從小到大排序分別使用希爾排序的交換法和移動法,分別進行速度的測試
交換法:在分組中,當發(fā)現(xiàn)了2數(shù)的位置應該交換(逆序),就交換
簡單說:有逆序就換,不停的重復,重復,再重復,效率低下
?
移動法:不馬上交換,先后移,直到找到temp該去的位置,一次性插入即可
簡單說:發(fā)現(xiàn)逆序了,先看找找自己應該插在那個位置,找到并確認了,只要一次插入就完成了,效率拉滿
?
代碼實現(xiàn)
抓緊時間好好學習嗷,等你學有所成了,參與制作mhy的游戲,多是一件美事啊