插入排序

內(nèi)部排序:排序期間元素全部存放在內(nèi)存中
外部排序:排序期間元素無法全部同時放在內(nèi)存中


插入排序

基本思想:每次將一個待排序的記錄按其關(guān)鍵字大小插入到前面已排好序的子序列中耳鸯。
1.直接插入排序
就地排序,空間復雜度為O(1)

void InsertSort(ElemType A[], int n)
{
    int i, j;
    for(i=2;i<=n;++i)
        if(A[i].key<A[i-1].key){
            A[0]=A[i];    //復制為哨兵A[0]不存放元素
            for(j=i-1;A[0].key<A[j].key;--j)    //后移
                A[j+1]=A[j];
            A[j+1]=A[0];    //插入
        }
}

時間效率
最好的情況:表中元素已有序负饲,每插入一個元素只需比較一次無序移動瘫筐,O(n)
最壞的情況:表中元素逆序谬哀,總比較次數(shù)Σi,總移動次數(shù)Σ(i+1)(i屬于[2,n])
平均 O(n^2)
穩(wěn)定
適用性:適用于順序存儲和鏈式存儲的線性表严肪。適合基本有序和數(shù)據(jù)量不大的排序表史煎。為鏈式存儲時,可從前往后查找指定元素的位置驳糯。注:大部分排序算法都僅適用于順序存儲的線性表篇梭。

2.折半插入排序
基本思想:上一個方法是邊比較邊移動的,折半插入排序酝枢,先用折半查找找到插入位置恬偷,在統(tǒng)一移動。適用于順序存儲的線性表帘睦。

void InsertSort(ElemType A[], int n)
{
    int i, j, low, high, mid;
    for(i=2;i<=n;++i){
        A[0]=A[i];
        low=1; high=i-1;
        while(low<=high){
            mid=(low+high)/2;
            if(A[mid].key>A[0].key)    high=mid-1;
            else low=mid+1;
        }
        for(j=i-1;j>=high+1;--j)
            A[j+1]=A[j];
        A[high+1]=A[0];
    }
}

減少了比較次數(shù)O(nlog2n)
時間復雜度仍為O(n^2)
穩(wěn)定

3.希爾排序
(縮小增量排序)
基本思想:先將待排序表分割為若干形如L[i, i+d, i+2d, ... , i+kd]的特殊子表袍患,分別進行直接插入排序,當整個表中的元素已呈基本有序時竣付,再對全體記錄進行一次直接排序诡延。(相隔d的元素分為一組分別進行直接插入排序,縮小d直到d為1即整體進行直接插入排序)
d1=n/2 d(i+1)=?di/2?

void ShellSort(ElemType A[], int n)
{
     for(dk=n/2;dk>=1;dk=dk/2)
        for(i=dk+1;i<=n;++i)   //前dk個分別是dk個組的第一個所以從dk+1開始排序
            if(A[i].key<A[i-dk].key){
                A[0]=A[i];
                for(j=i-dk;j>0&&A[0].key<A[j].key;j-=dk)
                    A[j+dk]=A[j];
                A[j+dk]=A[0];
            }
}

空間效率O(1)
時間效率:當n在某個范圍內(nèi)是古胆,O(n1.3)肆良,最壞情況O(n2)
不穩(wěn)定:當相同關(guān)鍵字被劃分到不同子表時筛璧,可能會改變相對次序。
適用性:僅適用于順序存儲的線性表

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惹恃,一起剝皮案震驚了整個濱河市夭谤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巫糙,老刑警劉巖朗儒,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異参淹,居然都是意外死亡采蚀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門承二,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榆鼠,“玉大人,你說我怎么就攤上這事亥鸠∽惫唬” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵负蚊,是天一觀的道長神妹。 經(jīng)常有香客問我,道長家妆,這世上最難降的妖魔是什么鸵荠? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮伤极,結(jié)果婚禮上蛹找,老公的妹妹穿的比我還像新娘。我一直安慰自己哨坪,他們只是感情好庸疾,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著当编,像睡著了一般届慈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上忿偷,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天金顿,我揣著相機與錄音,去河邊找鬼鲤桥。 笑死揍拆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的芜壁。 我是一名探鬼主播礁凡,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼慧妄!你這毒婦竟也來了顷牌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤塞淹,失蹤者是張志新(化名)和其女友劉穎窟蓝,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饱普,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡运挫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了套耕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谁帕。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖冯袍,靈堂內(nèi)的尸體忽然破棺而出匈挖,到底是詐尸還是另有隱情,我是刑警寧澤康愤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布儡循,位于F島的核電站,受9級特大地震影響征冷,放射性物質(zhì)發(fā)生泄漏择膝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一检激、第九天 我趴在偏房一處隱蔽的房頂上張望肴捉。 院中可真熱鬧,春花似錦叔收、人聲如沸每庆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缤灵。三九已至,卻和暖如春蓝晒,著一層夾襖步出監(jiān)牢的瞬間腮出,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工芝薇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胚嘲,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓洛二,卻偏偏與公主長得像馋劈,于是被迫代替她去往敵國和親攻锰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

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