java數(shù)據(jù)結構之希爾排序

希爾排序(Shell's Sort) 是插入排序的一種又稱 “縮小增量排序”(Diminishing Increment Sort)瓜喇,是直接插入排序算法的一種更高效的改進版本削彬。希爾排序是非穩(wěn)定排序算法髓霞。該方法因 D.L.Shell 于 1959 年提出而得名甜橱。

希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序算法排序高每;隨著增量逐漸減少首繁,每組包含的關鍵詞越來越多,當增量減至 1 時哨查,整個文件恰被分成一組逗抑,算法便終止。

希爾排序是基于插入排序的以下兩點性質而提出改進方法的:

插入排序在對幾乎已經排好序的數(shù)據(jù)操作時解恰,效率高锋八,即可以達到線性排序的效率。

但插入排序一般來說是低效的护盈,因為插入排序每次只能將數(shù)據(jù)移動一位挟纱。

該方法實質上是一種分組插入方法

比較相隔較遠距離(稱為增量)的數(shù),使得數(shù)移動時能跨過多個元素腐宋,則進行一次比較就可能消除多個元素交換紊服。D.L.shell 于 1959 年在以他名字命名的排序算法中實現(xiàn)了這一思想檀轨。算法先將要排序的一組數(shù)按某個增量d 分成若干組,每組中記錄的下標相差 d. 對每組中全部元素進行排序欺嗤,然后再用一個較小的增量對它進行参萄,在每組中再進行排序。當增量減到 1 時煎饼,整個要排序的數(shù)被分成一組讹挎,排序完成。

一般的初次取序列的一半為增量吆玖,以后每次減半筒溃,直到增量為 1。

穩(wěn)定性

由于多次插入排序沾乘,我們知道一次插入排序是穩(wěn)定的怜奖,不會改變相同元素的相對順序,但在不同的插入排序過程中翅阵,相同的元素可能在各自的插入排序中移動歪玲,最后其穩(wěn)定性就會被打亂,所以 shell 排序是不穩(wěn)定的掷匠。

排序過程

縮小增量

希爾排序屬于插入類排序, 是將整個有序序列分割成若干小的子序列分別進行插入排序滥崩。

排序過程:先取一個正整數(shù) d1數(shù)組元素放一組,組內進行直接插入排序讹语;然后取 d2

三趟結果

04 13 27 38 49 49 55 65 76 97

希爾排序是按照不同步長對元素進行插入排序夭委,當剛開始元素很無序的時候,步長最大募强,所以插入排序的元素個數(shù)很少,速度很快崇摄;當元素基本有序了擎值,步長很小,插入排序對于有序的序列效率很高逐抑。所以鸠儿,希爾排序的時間復雜度會比 o(n^2) 好一些。

java代碼如下:

package 數(shù)據(jù)結構;

public class Xierpaixu {

public static void sort(int arr []){

int h=1;

while(h<arr.length-1){

h=h*3+1;//h不斷變化厕氨,間隔不斷變大进每,找到最大的間隔,開始排序

}

while(h>0){

int temp=0;

for(int i=h;i<arr.length;i++){

temp=arr[i];

int j=i;

while(j>h-1&&arr[j-h]>=temp){

arr[j]=arr[j-h];

j-=h;

}

arr[j]=temp;

}

h=(h-1)/3;

}

}

}

測試:

package 數(shù)據(jù)結構;

public class TextXierpaixu {

public static void main(String args[]){

? int arr[]={2,5,4,15,54,34,21,43,22,67,76,78,33,61};

? Xierpaixu.sort(arr);

? for(int i=0;i<arr.length-1;i++){

? System.out.println(arr[i]);

? }

}}

輸出結果如下:


好啦,這次就到這里啦命斧,有問題可以和我留言哦田晚!

郵箱:2321591758@qq.com

其他博客的鏈接:

Github個人網站?知乎?簡書

歡迎各位訪問哦,這次就到這里啦国葬!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末贤徒,一起剝皮案震驚了整個濱河市芹壕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌接奈,老刑警劉巖踢涌,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異序宦,居然都是意外死亡睁壁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門互捌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來潘明,“玉大人,你說我怎么就攤上這事疫剃《ひ撸” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵巢价,是天一觀的道長牲阁。 經常有香客問我,道長壤躲,這世上最難降的妖魔是什么城菊? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮碉克,結果婚禮上凌唬,老公的妹妹穿的比我還像新娘。我一直安慰自己漏麦,他們只是感情好客税,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著撕贞,像睡著了一般更耻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捏膨,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天秧均,我揣著相機與錄音,去河邊找鬼号涯。 笑死目胡,一個胖子當著我的面吹牛,可吹牛的內容都是我干的链快。 我是一名探鬼主播誉己,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼久又!你這毒婦竟也來了巫延?” 一聲冷哼從身側響起效五,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎炉峰,沒想到半個月后畏妖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡疼阔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年戒劫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婆廊。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡迅细,死狀恐怖,靈堂內的尸體忽然破棺而出淘邻,到底是詐尸還是另有隱情茵典,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布宾舅,位于F島的核電站统阿,受9級特大地震影響,放射性物質發(fā)生泄漏筹我。R本人自食惡果不足惜扶平,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蔬蕊。 院中可真熱鬧结澄,春花似錦、人聲如沸岸夯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猜扮。三九已至赎瑰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間破镰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工压储, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鲜漩,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓集惋,卻偏偏與公主長得像孕似,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子刮刑,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內容