排序7 歸併排序

2021-10-07 09:19:49 字數 1016 閱讀 1899

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 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併 將兩個已經排好序的集合合併到乙個集合眾,並且保證新的集合也是有序的。核心點 只有乙個元素的集合是已經排好序的集合。歸併排序是建立在...