常用排序演算法 歸併排序

2021-06-17 19:42:41 字數 859 閱讀 1535

歸併排序

基本思想:

先把陣列拆分,直到分成都只含有乙個元素的陣列,這樣兩兩合併,逐漸就可以得到已排序的字陣列,繼續合併直到合併成原來陣列長度為止。

時間複雜度:o(nlogn)

空間複雜度:o(nlogn),每一輪合併都需要n空間,共需要logn輪(第一輪是1×n(需要n個陣列,每個陣列長度為1),第二輪是2×2/n,第三輪4×4/n,。。。最後一輪是n/2×2(需要兩個陣列,每個長度為n/2))

穩定性:穩定

適用情況:非原地排序,需要額外空間。對資料有序性不敏感,無論情況好壞時間複雜度都是o(nlogn),穩定。

實現**(c語言)

#include#include//start表示陣列起始位置,mid表示中間位置,end表示結束位置

//對於陣列start--mid位置已有序,mid+1--end位置也已有序,merge功能是把這兩部分合併

void merge(int a,int start,int mid,int end)

for(;ia[k++]=left[i];

for(;ja[k++]=right[j];

}void mergesort(int a,int start,int end)

}int main()

; int i;

for(i=0;i<7;i++)

printf("%d",a[i]);

printf("\n");

mergesort(a,0,6);

for(i=0;i<7;i++)

printf("%d",a[i]);

printf("\n");

return 0;

}

常用排序演算法 歸併排序

確定分界點 mid l r 2 取中間數,分成 l,mid 和 mid,r 兩個區域。將l l,mid 和 mid,r 兩個區域進行遞迴排序。歸併 將左右兩個有序的序列合併成乙個有序序列。給定你乙個長度為n的整數數列。請你使用歸併排序對這個數列按照從小到大進行排序。並將排好序的數列按順序輸出。輸入格...

常用演算法排序(04) 歸併排序

歸併排序是利用先遞迴進行分解,將乙個規模為 n nn 的問題分解成兩個規模為 n 2 n 2n 2 的問題,再不斷的繼續進行遞迴分解成最終規模為1 11的問題。然後再逐漸的從小規模結果進行合併,最終得到完整的結果。也即分而治之的思想。其 如下 原圖位址 歸併排序使用了空間換時間的方式,用乙個輔助陣列...

排序演算法 歸併排序

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。首先考慮下如何將將二個有序數列合併。這個非常簡單,只要從比較二個數列的第乙個數,誰小就先取誰,取了後就在對應數列中刪除這個數。然後再進行比較,如果有數列為空,那直接將另...