直接插入排序

導語

接上一篇文章(冒泡排序也要寫得優(yōu)雅出眾) http://www.reibang.com/p/8abad5e9432b 直接插入排序的思想是:將數(shù)組的無序區(qū)元素一個個插入到前面的有序區(qū)的合適位置,使有序區(qū)仍然有序蚁孔,開始時有序區(qū)只有第一個元素a[0]。

直接插入排序算法步驟:
1.假設待排序數(shù)組為a[0...n],a[0]自成一個有序區(qū)烛愧,無序區(qū)為a[1...n];
2.遍歷a[1..n],在有序區(qū)里找到a[i]的合適位置
3.在有序區(qū)內(nèi)掂碱,大于a[i]的元素后移怜姿,將a[i]插入使得有序區(qū)仍然有序。

下面給出嚴格按照定義書寫的代碼:

void insertSort(int a[], int length) {
    //a[0]為有序區(qū)疼燥,從第二個元素a[1]開始遍歷
    for (int i = 1; i < length; i++) {
        //為a[i]在前面的有序區(qū)里找到適合的位置
        int j;
        for (j = i - 1; j >= 0; j--) {
            if (a[j] < a[i]) {
                break;
            }
        }
        
        if(j != i-1){//如果找到位置
            int temp = a[i];
            //將大于a[i]的數(shù)往后移一位
            for (int k = i-1; k > j; k--) {
                a[k+1] = a[k];
            }
            a[j+1] = temp;//將a[i]放到合適位置
        }
    }
}

下面給出一種改進方法沧卢,可以將找位置和移位合并起來,每次a[i]先和a[i-1]進行比較醉者,如果a[i]>a[i-1]說明已經(jīng)有序不需要找但狭,反之披诗,將大于a[i]的元素一邊進行后移,一邊查找插入位置立磁,代碼如下:

void insertSort2(int a[], int length) {
    for (int i = 1; i < length; i++) {
        int temp = a[i];
        //將找位置與數(shù)據(jù)后移合并
        if (a[i] < a[i - 1]) {
            int j;
            for (j = i-1; j >= 0 && a[j] > temp; j--) {
                a[j+1] = a[j];
            }
            a[j+1] = temp;
        }
    }
}

我在網(wǎng)上也看到過另一種改進方法呈队,將數(shù)據(jù)后移用交換函數(shù)替代,這樣寫代碼十分簡潔:

void insertSort3(int a[], int length) {
    for (int i = 1; i < length; i++) {
        for (int j = i-1; j >= 0 && a[j] > a[j+1]; j--) {
            //用交換代替數(shù)據(jù)后移
            swap(a[j], a[j+1]);
        }
    }
}
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末息罗,一起剝皮案震驚了整個濱河市掂咒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌迈喉,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件温圆,死亡現(xiàn)場離奇詭異挨摸,居然都是意外死亡,警方通過查閱死者的電腦和手機岁歉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門得运,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锅移,你說我怎么就攤上這事熔掺。” “怎么了非剃?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵置逻,是天一觀的道長。 經(jīng)常有香客問我备绽,道長券坞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任肺素,我火速辦了婚禮恨锚,結果婚禮上,老公的妹妹穿的比我還像新娘倍靡。我一直安慰自己猴伶,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布塌西。 她就那樣靜靜地躺著他挎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雨让。 梳的紋絲不亂的頭發(fā)上雇盖,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音栖忠,去河邊找鬼崔挖。 笑死贸街,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的狸相。 我是一名探鬼主播薛匪,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼脓鹃!你這毒婦竟也來了逸尖?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤瘸右,失蹤者是張志新(化名)和其女友劉穎娇跟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體太颤,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡苞俘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了龄章。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吃谣。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖做裙,靈堂內(nèi)的尸體忽然破棺而出岗憋,到底是詐尸還是另有隱情,我是刑警寧澤锚贱,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布仔戈,位于F島的核電站,受9級特大地震影響惋鸥,放射性物質(zhì)發(fā)生泄漏杂穷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一卦绣、第九天 我趴在偏房一處隱蔽的房頂上張望耐量。 院中可真熱鬧,春花似錦滤港、人聲如沸廊蜒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽山叮。三九已至,卻和暖如春添履,著一層夾襖步出監(jiān)牢的瞬間屁倔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工暮胧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锐借,地道東北人问麸。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像钞翔,于是被迫代替她去往敵國和親严卖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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

  • 尤瑟納而女士借阿德里安之口云布轿,當一個人寫作或計算時哮笆,就超越了性別,甚至超越了人類——當你寫作和計算時汰扭,就是在思考稠肘。...
    神經(jīng)騷棟閱讀 1,659評論 7 8
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序萝毛,而外部排序是因排序的數(shù)據(jù)很大启具,一次不能容納全部...
    每天刷兩次牙閱讀 3,727評論 0 15
  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序珊泳,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,164評論 0 52
  • 今天的文章由“持有一顆耐操的心”的熱情網(wǎng)友贊助 1 如果你遲到了拷沸,千萬不要說色查,I am sorry I am la...
    殷大杰閱讀 363評論 0 0
  • 案例 (1)某班學生期末考試成績,語文撞芍,數(shù)學秧了,英文分別存儲在3個列表中,同時迭代三個列表序无,計算每個學生的總分验毡。(并...
    OldSix1987閱讀 308評論 0 0