排序第二記——插入排序(插入点晴、Shell排序)

這次直入主題,我今天要復(fù)習(xí)的是插入排序悯周!插入排序分為“直接插入”和“Shell排序”,Shell排序就是希爾排序陪竿,可以看做是直接插入排序從成熟體進(jìn)化為完全體~
好的直接來(lái)看插入排序:

直接插入排序

我們先說(shuō)一下插入排序的原理:

通過(guò)對(duì)未排序的數(shù)據(jù)執(zhí)行逐個(gè)插入到合適的位置完成排序工作禽翼。

  • 1.首先對(duì)數(shù)組前兩個(gè)數(shù)據(jù)進(jìn)行從小到大排序
  • 2.將第三個(gè)數(shù)據(jù)與排好序的兩個(gè)數(shù)據(jù)比較,插入合適的位置族跛。
  • 3.第四個(gè)同樣方式插入到他們?nèi)齻€(gè)中闰挡。
  • 4.不斷重復(fù),直到結(jié)束礁哄。
  • 時(shí)間復(fù)雜度: 平均:O(n^2) 最佳:O(n) 最壞:O(n^2)
  • 空間復(fù)雜度: O(1)
  • 穩(wěn)定性: 穩(wěn)定

這個(gè)聽(tīng)起來(lái)比冒泡難一些长酗,但是其實(shí)想象力豐富一些,就會(huì)覺(jué)得這個(gè)這個(gè)很簡(jiǎn)單~給個(gè)圖片就懂了桐绒!
我又去百科盜圖了:

插入排序

圖片的簡(jiǎn)單明了吧夺脾?就是從第二個(gè)值開(kāi)始依次去取之拨。然后每次都比較,然后把每次取的數(shù)字咧叭,放到該放的位置上蚀乔。
直接看代碼吧:手敲代碼:

/**
 * Created by AceCream on 2017/3/20.
 *
 * 插入排序(Insertion Sort)
 * 原理:通過(guò)對(duì)未排序的數(shù)據(jù)執(zhí)行逐個(gè)插入到合適的位置完成排序工作。
 * 1.首先對(duì)數(shù)組前兩個(gè)數(shù)據(jù)進(jìn)行從小到大排序
 * 2.將第三個(gè)數(shù)據(jù)與排好序的兩個(gè)數(shù)據(jù)比較菲茬,插入合適的位置吉挣。
 * 3.第四個(gè)同樣方式插入到他們?nèi)齻€(gè)中。
 * 4.不斷重復(fù)婉弹,直到結(jié)束袱讹。
 *
 * 時(shí)間復(fù)雜度: 平均:O(n^2)   最佳:O(n)   最壞:O(n^2)
 * 空間復(fù)雜度: O(1)
 * 穩(wěn)定性: 穩(wěn)定
 *
 */
public class InsertSort {
    public static void main(String[] args) {
            int value[] = {12,15,9,20,6,31,24};
            InsertSort insertSort = new InsertSort();
            insertSort.insertSort(value);
            System.out.print("最終結(jié)果 ");
            for (int result : value) {
                System.out.print(result+" ");
            }
    }
    private void insertSort(int[] value) {
        //temp值待命
        int temp;
        for (int i=1;i<value.length;i++){
            //從第二個(gè)數(shù)據(jù)開(kāi)始取 每輪的檢測(cè)數(shù)據(jù)都先放temp里
            temp = value[i];
            int j = i-1;
            while (j>=0 && temp<value[j]){
                //如果比較的值,比temp大酪惭,就讓這個(gè)值往后去沪饺。temp繼續(xù)比較。佩脊。蛙粘。碰到比它小的,就在其后面落下(后面這句是循環(huán)外放下的)
                value[j+1]=value[j];
                j--;
            }
            //沒(méi)有比它小的就放回去威彰,有的話(huà)就放到應(yīng)該在的位置
            value[j+1]=temp;
        }
    }
}

我都注釋的比較詳細(xì)了~雖然我自己也總忘這個(gè)排序出牧。

好的吃完甜點(diǎn),我們開(kāi)始今天的主菜——Shell排序

希爾排序

希爾排序是理論上效率最高的排序歇盼。但是舔痕!但是僅僅是理論上,因?yàn)樵趯?shí)踐中的使用豹缀,希爾排序還是被快排擊敗了伯复,兩種排序都不太穩(wěn)定,但是整體的試驗(yàn)中邢笙,快排還是略勝一籌~
希爾排序啸如,也叫做縮小增量排序,其執(zhí)行方式氮惯,我個(gè)人覺(jué)得還是很變態(tài)的叮雳。
還是看步驟吧:

  • 1.將n個(gè)元素的數(shù)組分為n/2個(gè)數(shù)字序列:第一個(gè)數(shù)據(jù)和第n/2+1個(gè)數(shù)據(jù)為一對(duì)...
  • 2.一次循環(huán)使每個(gè)序列對(duì)排好
  • 3.變?yōu)閚/4個(gè)序列,再次排序妇汗。
  • 4.不斷重復(fù)帘不,周而復(fù)始,隨著序列變?yōu)?杨箭,排序完成
希爾排序過(guò)程

看這個(gè)圖寞焙,應(yīng)該是可以理解的,它是分來(lái),然后一一對(duì)應(yīng)捣郊,然后比較辽狈,單獨(dú)排序,直到最后模她,排列整齊稻艰。。侈净。
當(dāng)初覺(jué)得這個(gè)思想好強(qiáng)尊勿!但是!我覺(jué)得簡(jiǎn)單了解其原理就足夠了畜侦。當(dāng)然元扔,想手敲也是可以的,但覺(jué)得必要性不是那么強(qiáng)旋膳,因?yàn)閼?yīng)用情況下澎语,我寧可選擇快排。

/**
 * Created by AceCream on 2017/3/22.
 * 希爾排序(ShellSort)
 * 希爾排序效率很高验懊!所以也是很常用的一種排序擅羞。
 * 基于插入排序的思想:縮小增量排序
 * 步驟:
 * 1.將n個(gè)元素的數(shù)組分為n/2個(gè)數(shù)字序列:第一個(gè)數(shù)據(jù)和第n/2+1個(gè)數(shù)據(jù)為一對(duì)...
 * 2.一次循環(huán)使每個(gè)序列對(duì)排好
 * 3.變?yōu)閚/4個(gè)序列,再次排序义图。
 * 4.不斷重復(fù)减俏,周而復(fù)始,隨著序列變?yōu)?碱工,排序完成
 *
 * 時(shí)間復(fù)雜度: 平均:O(n^1.3)   最佳:O(n)   最壞:O(n^2)
 * 空間復(fù)雜度: O(1)
 * 穩(wěn)定性: 不穩(wěn)定
 *
 */
public class ShellSort {

    public static void shellSort(int a[]){
        int gap;
        int lenth = a.length;
        for (gap=lenth/2;gap>0;gap/=2){ //從數(shù)組的第gap個(gè)元素開(kāi)始  分出來(lái)循環(huán)幾次
            for (int i=0;i<gap;i++){    //分出來(lái)有多少組
                //直接插入排序
                for (int j=i+gap;j<lenth;j+=gap){
                    if (a[j]<a[j-gap]){
                        int temp = a[j];
                        int k = j-gap;
                        while (k>=0&&temp<a[k]){
                            a[k+gap]=a[k];
                            k -= gap;
                        }
                        a[k+gap]=temp;
                    }
                }
            }
        }
    }

    public static void main(String[] args) {
        int value[] = {49,27,46,55,4,13,38,65,97,26};
        shellSort(value);
        System.out.print("最終結(jié)果 ");
        for (int result : value) {
            System.out.print(result+" ");
        }
    }
}

這一次我沒(méi)有選擇在線(xiàn)手敲娃承,私下每次我需要使用的時(shí)候我會(huì)回來(lái)看看畢竟學(xué)習(xí)不是背誦,最主要的是:了解其思想怕篷!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末历筝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子廊谓,更是在濱河造成了極大的恐慌梳猪,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,080評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒸痹,死亡現(xiàn)場(chǎng)離奇詭異春弥,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)电抚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)竖共,“玉大人蝙叛,你說(shuō)我怎么就攤上這事」” “怎么了借帘?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,630評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵蜘渣,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我肺然,道長(zhǎng)蔫缸,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,554評(píng)論 1 284
  • 正文 為了忘掉前任际起,我火速辦了婚禮拾碌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘街望。我一直安慰自己校翔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布灾前。 她就那樣靜靜地躺著防症,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哎甲。 梳的紋絲不亂的頭發(fā)上蔫敲,一...
    開(kāi)封第一講書(shū)人閱讀 49,856評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音炭玫,去河邊找鬼奈嘿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛础嫡,可吹牛的內(nèi)容都是我干的指么。 我是一名探鬼主播,決...
    沈念sama閱讀 39,014評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼榴鼎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼伯诬!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起巫财,我...
    開(kāi)封第一講書(shū)人閱讀 37,752評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤盗似,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后平项,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體赫舒,經(jīng)...
    沈念sama閱讀 44,212評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評(píng)論 2 327
  • 正文 我和宋清朗相戀三年闽瓢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了接癌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,687評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扣讼,死狀恐怖缺猛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤荔燎,帶...
    沈念sama閱讀 34,347評(píng)論 4 331
  • 正文 年R本政府宣布耻姥,位于F島的核電站,受9級(jí)特大地震影響有咨,放射性物質(zhì)發(fā)生泄漏琐簇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評(píng)論 3 315
  • 文/蒙蒙 一座享、第九天 我趴在偏房一處隱蔽的房頂上張望婉商。 院中可真熱鬧,春花似錦征讲、人聲如沸据某。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,777評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)癣籽。三九已至,卻和暖如春滤祖,著一層夾襖步出監(jiān)牢的瞬間筷狼,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,006評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工匠童, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留埂材,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,406評(píng)論 2 360
  • 正文 我出身青樓汤求,卻偏偏與公主長(zhǎng)得像俏险,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扬绪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評(píng)論 2 349

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

  • 概述 排序有內(nèi)部排序和外部排序竖独,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大挤牛,一次不能容納全部...
    蟻前閱讀 5,170評(píng)論 0 52
  • 概述:排序有內(nèi)部排序和外部排序莹痢,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大墓赴,一次不能容納全部...
    每天刷兩次牙閱讀 3,729評(píng)論 0 15
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個(gè)記錄插入到已排序好...
    依依玖玥閱讀 1,245評(píng)論 0 2
  • 姓名:潘林 公司:寧波大發(fā)化纖有限公司 組別:六項(xiàng)精進(jìn)259期謙虛二組 【日精進(jìn)打卡第79天】 【知~學(xué)習(xí)】 《六...
    大發(fā)化纖潘林閱讀 152評(píng)論 0 0
  • 愿2017懷揣著夢(mèng)想竞膳,努力前行。不辜負(fù)每一天的時(shí)光……
    筱貝貝閱讀 241評(píng)論 0 0