歸併排序的體會

2021-06-21 13:09:50 字數 538 閱讀 6599

歸併演算法就是將乙個陣列先遞迴分成n個部分,每個部分有乙個元素,然後再兩兩合併(對於二路歸併演算法而言)。

合併成n/2個有序部分,每個部分有兩個元素(可能最後乙個部分有乙個元素)。

然後再將這些部分再兩兩合併,合併成n/4個有序部分。。。。。。

遞迴,直到合併成乙個部分。這樣就排好序了。

效能分析:

時間複雜度為o(n*n),空間複雜度為o(n)。

是穩定排序演算法。

例子:

void merge(int a, int low, int middle, int high)

else

} while(i<=middle) a[k++]=b[i++];//如果右半部分已插入完,左半部分有剩餘,直接將左半部分剩餘部分直接加在陣列後面

while(j<=high) a[k++]=b[j++];//如果左半部分已插入完,右半部分有剩餘,直接將右半部分剩餘部分直接加在陣列後面

}void mergesort(int a, int low ,int high){

if(low

歸併排序以及歸併排序的優化

1 歸併排序的實現 歸併排序也利用了分治法的思想,首先將序列分成左右兩部分,將左右兩部分分別排序,然後將有序的兩個子串行進行合併 即merge操作 程式是遞迴進行的,主函式實現如下 歸併排序主函式 void merge sort int a,int first,int last else while...

歸併排序的優化 自然歸併排序

不知道怎麼將這個演算法思想表達的更好,也不知道自己的理解的是否對 黑體的注釋是普通的自然歸併,從相鄰長度為1的子陣列段進行合併也就是一開始將每兩個相鄰元素進行歸併,然後再相鄰四個元素左右兩組都有序的合併成4個有序的.自下向上不斷往上歸併直到有序 自然合併排序是合併排序演算法的一種改進.自然合併排序 ...

歸併排序(2 路歸併排序)

遞迴寫法 include define maxn 100 void merge int a,int l1,int r1,int l2,int r2 將陣列a的區間 l1,r1 和區間 l2,r2 合併為乙個有序區間 else while i r1 while j r2 for int i 0 i非遞...