比較排序之插入和歸併排序

2021-07-22 19:25:03 字數 938 閱讀 7755

對於少量的元素的排序,插入排序是乙個很有效的演算法。其原理很簡單,類似於我們打撲克的時候,開始時,我們左手為空並且桌上的牌面向下,然後,我們每次從桌子上拿走一張牌並將它插入左手的正確位置,為了找到正確位置,我們從右往左將它與每張牌進行比較。

對於陣列來說,我們就是從第二個元素開始,在該元素左邊建立乙個排好序的子陣列,然後對右邊的元素進行依次遍歷,將它們插入到左邊的子陣列中,這樣就排好序啦。

void inter_sort(int *a,int n)

a[j+1]=temp;}}

歸併排序遵循的是分治法的思想:將原來的問題分解成幾個規模較小但類似於原問題的子問題,遞迴地求解這些子問題,然後再合併這些子問題的解,來建立原問題的解。

如下圖所示:

所以我們只需要乙個解的合併函式,然後再有乙個對原問題的分解的遞迴函式就可以解決問題啦。
void merge(int *a,int start,int mid,int end)

while(i//if l array left

while(j//if r array left

}void merge_sort(int *a,int start,int end)

}

我們可以總結一下兩種排序的優缺點,它們都屬於比較排序,所以它們的時間下界都是nlgn,插入排序的時間複雜度是o(n^2),歸併排序的時間複雜度是o(nlgn),可以說歸併排序的時間複雜度已經到了比較排序的下界,但是它用了o(n)的空間複雜度,而插入排序的空間複雜度只有o(1)。

快速排序和歸併排序比較

by 潘雲登 date 2009 7 12 email intrepyd gmail.com homepage 對於商業目的下對本文的任何行為需經作者同意。寫在前面 1.本文內容對應 演算法導論 第2版 第2章和第7章。2.比較了歸併排序與快速排序之間的不同策略,啟發對分治演算法的深入思考。分治法有...

插入排序和歸併排序

一共有三種 直接插入排序 希爾排序和折半插入排序。最後乙個折半插入排序,感覺用在陣列上面不太方便,就沒寫出來。遞迴實現沒有思路,使用的非遞迴演算法。直接插入排序 這個演算法預設前n個數是已經排好序的,n隨著你的插入逐漸變大,最開始是1。然後從後往前逐漸查詢應該插入的位置 我的演算法是從小到大,那就依...

插入排序和歸併排序

本人在csdn的原鏈結 首先是插入排序,這個過程就可以比喻成左手放牌 已排好序 右手抓牌 牌堆上最頂端的一張牌 然後放到左手,插到正確的位置 for j 2 to a.length key a j i j 1 while i 0 a i 0 key a i a i 1 key 空間複雜度為o 1 最...