排序算法-希爾排序

前言:排序是現(xiàn)在程序員的必備技能,是很多公司的面試必考點,不管是做移動端,后端開發(fā),排序是繞不過的,眾生平等。學(xué)習(xí)其排序的思想往往能解決不同類型的問題,所以靜下心來,研究一下不同的排序算法,算是對自己有一個提升。

排序概述:排序就是將一組對象按照某種邏輯順序重新排列的過程。

十大排序算法:冒泡排序,選擇排序,插入排序,歸并排序,堆排序,快速排序,希爾排序,計數(shù)排序,基數(shù)排序,桶排序。

本文對希爾排序走一個解析:

希爾排序步驟:

1.一種基于插入排序的快速排序算法。簡單插入排序?qū)τ诖笠?guī)模亂序數(shù)組很慢,因為元素只能一點一點得從數(shù)組一端移動到另一端。例如,如果主鍵最小的元素正好在數(shù)組的盡頭,要將它挪到正確的位置就需要N-1次移動。

2.希爾排序為了加快速度簡單地改進了插入排序,也稱為縮小增量排序,同時該算法突破0(n^2)的第一批算法之一。

3.希爾排序是把待排序數(shù)組按一定數(shù)量的分組,對每組使用直接插入排序算法排序;然后縮小數(shù)量繼續(xù)分組排序,隨著數(shù)量逐漸減少,每組包含的元素越來越多,當數(shù)量減至1時,整個數(shù)組恰被分成一組,排序就完成了。這個不斷縮小的數(shù)量,就構(gòu)成了一個增量序列。

代碼舉例:

對一個數(shù)組進行排序:(86,11,77,23,32,45,58,63,93,4,37,22)

int[] array = {86,11,77,23,32,45,58,63,93,4,37,22};

排序代碼展示:?

希爾排序

調(diào)用sort方法后打印如下:

希爾排序打印


對該案例進行分析:(86,11,77,23,32,45,58,63,93,4,37,22)

(1) ?當gap = 6,因為該數(shù)組長度為12,那么就從58開始 到22這一組, 根據(jù)排序代碼所知:currentValue = 58(待排序元素)preIndex = 0 ? currentValue < 第0個位置也就是86。?滿足while條件進入:58這個位置變成了86 ?第0個位置就變成了58.直至for循環(huán)結(jié)束,完成了第一組排序。

? ? ? ? ?數(shù)組變成 ------》 [58, 11, 77, 4, 32, 22, 86, 63, 93, 23, 37, 45]?

(2)當gap = 3,因為該數(shù)組長度為12. ?那么就從4開始 到45這一組依然按照第(1)順序進行操作。

? ? ? ? ?數(shù)組變成 ------》 [4, 11, 22, 23, 32, 45, 58, 37, 77, 86, 63, 93]

(3)當gap = 1,因為該數(shù)組長度為12. ?那么就從11開始 到93這一組依然按照第(1)順序進行操作。

? ? ? ? ?數(shù)組變成 ------》?[4, 11, 22, 23, 32, 37, 45, 58, 63, 77, 86, 93]

至此排序結(jié)束

?打印每個步驟的數(shù)組:

步驟打印

?至此希爾排序就到這里講解結(jié)束了,細看的話其實一點也不復(fù)雜。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容