插入排序與希爾排序

參考資料:
http://www.cnblogs.com/jingmoxukong/p/4303279.html
http://www.cnblogs.com/jingmoxukong/p/4303279.html

在任意算法能夠正常運行之前,必須猴誊,有一些前置條件潦刃;

1. 插入排序

算法導(dǎo)論中,插入排序的例子舉得不錯:
前置條件:

  1. 假設(shè)整個撲克牌懈叹,是一個大數(shù)組乖杠,我們需要對撲克牌進行排序;
  2. 先摸一張牌澄成,這個時候胧洒,假設(shè)手上的第一張牌,是排序好的墨状;
  3. 然后卫漫,從桌上摸牌,從手中的牌中肾砂,找到合適的位置汛兜,并插入進去;
  4. 重復(fù)第三步通今,直到?jīng)]桌上的牌都被摸完;

java代碼的實現(xiàn):

/** * 插入排序 */
public static void sort3(int[] a) {   
// 類似于手中的撲克牌肛根,假設(shè)是排序好的辫塌,每摸一張,我們得找個位置插入進去   
// 1.從下標1開始派哲,遍歷整個數(shù)組(桌上的牌)臼氨,下標為0的為已排序好的 (手中的牌)   
// 2.不斷獲取數(shù)組中的數(shù)(類似于摸牌)用變量 key 記錄其值,表示待插入的數(shù)據(jù)(摸到的牌)   
// 3.從后往前芭届,遍歷已排序好的數(shù)組(遍歷手中的牌)储矩,找到要插入的位置,并插入   
// 4.重復(fù)上面的步驟 下標++   

int length = a.length;        // 牌的長度
int i = 1;          // 桌上牌的索引下標            
for (; i < length; i++) {      // 不斷摸牌      
  int key = a[i];                 // 摸到的牌    
  int j = i - 1;                // 手中的牌褂乍,遍歷的下標      
  // 從后往前遍歷手中的牌,將手中的牌與 摸到的牌持隧,對比      
  while (j >= 0 && a[j] > key) {         
       a[j + 1] = a[j];   // 元素向后移動        
       j--;      
  }         
  a[j + 1] = key;   // 插入 摸到的牌
 }
}

2. 希爾排序

希爾排序,是對插入排序的補充逃片,通過分組并分組插入排序屡拨,來形成局部有序的數(shù)組,最后走的還是 原始的插入排序,不過此時的序列呀狼,差不多已排序的差不多了裂允。所以,比較哥艇,交換次數(shù)就少绝编。對比采用 插入排序 與 希爾排序,來說貌踏,用希爾的速度 隨著待排序數(shù)組長度的 增大十饥,而更快;
java代碼:

public class SheellSort {   
  public static void main(String[] args) {      
    int[] array = {  10, 5, 3, -1, 88, 0, 2, 100, 22, 89,-9,78,34   };           
    sheellSort(array);   
  }

  public static void sheellSort(int[] list) {   
    // 相比插入排序哩俭,希爾排序引入了步長與分組   
    // 相鄰步長長度的數(shù)绷跑,形成分組,并分組進行插入排序   
    // 當(dāng)步長等于1時凡资,排序整個數(shù)組砸捏,結(jié)束分組循環(huán)  
    System.out.print("排序前\t");   
    printAll(list);  

    int length = list.length;   
    int gap = length / 2;        // 初始化步長為數(shù)組長度的一半 
    while (gap >= 1) {      
      for (int i = gap; i < length; i++) {    // 步長為gap的編為1組,進行插入排序(分組并進行插入排序)         
        int key = list[i];        // 摸牌         
        int j = i - gap;          // 手中的牌隙赁,遍歷的下標         
        for (; j >= 0 && list[j] > key; j = j - gap) {    // 從后往前遍歷垦藏,步長為gap,排序手中的牌           
            list[j + gap] = list[j];        
        }         
        list[j + gap] = key;    // 插入摸到的牌     
      } 
     
      System.out.format("gap=%d\t", gap);      
      printAll(list);      
      gap = gap / 2;             // gap繼續(xù)縮小伞访,也就是進行下一次分組   
    }   
    System.out.print("排序后\t");   
    printAll(list);
  }

  public static void printAll(int[] list) {   
      for (int value : list) {         
        System.out.print(value + "\t");      
      }  
      System.out.println();  
    }   
  }


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掂骏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子厚掷,更是在濱河造成了極大的恐慌弟灼,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冒黑,死亡現(xiàn)場離奇詭異田绑,居然都是意外死亡,警方通過查閱死者的電腦和手機抡爹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門掩驱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人冬竟,你說我怎么就攤上這事欧穴。” “怎么了泵殴?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵涮帘,是天一觀的道長。 經(jīng)常有香客問我笑诅,道長焚辅,這世上最難降的妖魔是什么映屋? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮同蜻,結(jié)果婚禮上棚点,老公的妹妹穿的比我還像新娘。我一直安慰自己湾蔓,他們只是感情好瘫析,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著默责,像睡著了一般贬循。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桃序,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天杖虾,我揣著相機與錄音,去河邊找鬼媒熊。 笑死奇适,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的芦鳍。 我是一名探鬼主播嚷往,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼柠衅!你這毒婦竟也來了皮仁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤菲宴,失蹤者是張志新(化名)和其女友劉穎贷祈,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喝峦,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡势誊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了愈犹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡闻丑,死狀恐怖漩怎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嗦嗡,我是刑警寧澤勋锤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站侥祭,受9級特大地震影響叁执,放射性物質(zhì)發(fā)生泄漏茄厘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一谈宛、第九天 我趴在偏房一處隱蔽的房頂上張望次哈。 院中可真熱鬧,春花似錦吆录、人聲如沸窑滞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哀卫。三九已至,卻和暖如春撬槽,著一層夾襖步出監(jiān)牢的瞬間此改,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工侄柔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留共啃,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓勋拟,卻偏偏與公主長得像勋磕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子敢靡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容