7.1原理
設原資料為:
兩個數字一組之間歸併:(二路歸併),誰小誰下來(需要新陣列放排序後資料)
再4個數字一組,比較l1與l2數字誰小誰下來且下標後移,直到l1>h1或,l2>h2;剩餘沒下來的數字再下來
再8個數字,16個數字…一組,直到整體有序,因此快
7.2**
//每次歸併
void merge (
int*arr,
int len,
int gap)
//時間複雜度o(n),空間複雜度o(n)需要額外陣列brr
else
}//誰小誰下來後還有剩餘資料
while
(low1<=high1)
while
(low2<=high2)
//進入下兩個歸併段
low1 = high2+1;
high1=low1+gap-1;
low2=high1+1;
high2=low2+gap
1:len-1;
}//打單的段
while
(len1
//brr放入arr中,並將動態記憶體free
for( i=
0;i)free
(brr);}
//歸併排序
void
mergesort
(int
*arr,
int len)
}
7.3評價
①時間複雜度o(nlogn),空間複雜度o(n)
②穩定***,不穩定指跳躍交換資料,而本排序是建立額外陣列空間,放到新陣列,沒有在arr中資料交換.因此歸併排序快而穩定但空間複雜度大
排序演算法 7 歸併排序
歸併排序思想 多次將兩個或兩個以上的有序表合併成乙個新的有序表。最簡單的 歸併 是直接將兩個有序的子表合併成乙個有序的表。歸併排序 2 路歸併實現 void merge int r,int low,int mid,int high else 將第1段餘下的部分複製到r1 while i mid 將第...
排序演算法7 歸併排序
歸併排序 歸併排序的演算法思想 將兩個或兩個以上的元素有序序列合併為乙個有序序列。其中,二路歸併排序是最常見的歸併排序。演算法思想 二路歸併排序的主要演算法思想是 假設元素個數是n,將每個元素作為乙個有序的子串行。繼續將相鄰的兩個有序子串行兩兩合併得到 示例 假設待排序元素序列為49,23,66,5...
排序 歸併排序
歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併 將兩個已經排好序的集合合併到乙個集合眾,並且保證新的集合也是有序的。核心點 只有乙個元素的集合是已經排好序的集合。歸併排序是建立在...