希爾排序就這麼簡單

2022-05-03 04:36:08 字數 1039 閱讀 8925

希爾排序(shell's sort)是插入排序的一種又稱「縮小增量排序」(diminishing increment sort),是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。該方法因d.l.shell於2023年提出而得名。

從上面我們很容易看出來,它是插入排序的高階版回顧一下插入排序:

如果給出的陣列足夠亂的話,那麼插入排序所耗費的時間是o(n^2)

既然希爾排序是插入排序的高階版,那它做了哪些優化呢??讓我們來看看:

從直觀上看希爾排序:

那麼,上面那裡說了將乙個序列分成好幾個序列,那麼到底怎麼分呢?比如有10個元素的序列,分成幾個才合適?每次縮減又是多少呢?

從專業的角度上講,將乙個序列分成好幾個序列,用乙個數來表示:那個數稱為增量。顯然的是,增量是不斷遞減的(直到增量為1)

往往的:如果乙個數列有10個元素,我們第一趟的增量是5,第二趟的增量是2,第三趟的增量是1。如果乙個數列有18個嚴肅,我們第一趟的增量是9,第二趟的增量是4,第三趟的增量是2,第四趟的增量是1

很明顯我們可以用乙個序列來表示增量:每次增量都/2

現在我們有乙個陣列,該陣列有6個元素

int arrays = ;
排序前:第一趟排序:

第二趟排序:

ps:**網上(侵刪)

public static void shellsort(int arrays) 

arrays[j] = temp;}}

}

我們發現希爾排序**其實非常簡單(相比對堆排序),理解起來也不難,就用增量來將陣列進行分隔,直到增量為1。底層幹的還是插入排序幹的活~

希爾排序就這麼簡單

希爾排序 shell s sort 是插入排序的一種又稱 縮小增量排序 diminishing increment sort 是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。該方法因d.l.shell於1959年提出而得名。從上面我們很容易看出來,它是插入排序的高階版 回顧一...

希爾排序就這麼簡單

希爾排序 shell s sort 是插入排序的一種又稱 縮小增量排序 diminishing increment sort 是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。該方法因d.l.shell於1959年提出而得名。從上面我們很容易看出來,它是插入排序的高階版回顧一下...

氣泡排序就這麼簡單

在我大一的時候自學c語言和資料結構,我當時就接觸到了氣泡排序 當時使用的是c語言編寫的 現在大三了,想要在暑假找到乙份實習的工作,又要回顧一下資料結構與演算法的知識點了。排序對我們來說是一點也不陌生了,當你打王者榮耀的時候也會有段位之分,當你打dota的時候也有天梯分。從高往下數,這個排名是有規律的...