歸併排序(遞迴實現)

2021-10-08 05:23:48 字數 764 閱讀 3364

歸併排序應該是穩定性排序中時間效率最高的演算法

歸併排序概述圖:

如圖,首先將一組序列遞迴拆分(分解)成多組,每組中只含乙個元素。

之後再歸併(merging函式即為歸併過程)。

#include

#include

#define maxsize 10 //排序序列長度

void merging(int *left,int leftsize,int right,int rightsize) //歸併函式

while (i < leftsize) temp[k++] = left[i++];

while (j < rightsize) temp[k++] = right[j++]; //根據歸併排序的特性,在上述while迴圈結束後,左組或者右組末尾還存在元素未存入temp,故需這兩步。並且不能用if,必須用while,想想為什麼。

for( m = 0; m < (leftsize+rightsize); m++)

//將temp中的元素複製給left,這樣下一次遞迴呼叫merging函式時,才能用到排好序的left,right。注意,這一步必不可少,否則導致排序失敗

}void mergesort(int k,int n) //歸併排序函式

}int main() //主函式

;mergesort(k,10);

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

printf(」\n");

return 0;

}

歸併排序遞迴實現

include include define length 10 using namespace std void merge int ar,int br,int start,int mid,int end else if i mid else void copy int ar,int br,int...

歸併排序(遞迴實現)

演算法思想 1 歸併排序是利用遞迴與分治技術,將資料序列劃分成為越來越小的半子表,再對半子表排序,最後再用遞迴步驟將排好序的半子表合併成為越來越大的有序序列。其中 歸 代表的是遞迴的意思,即遞迴地將陣列折半地分離為單個陣列。例如,陣列 5,2,1,7 會先折半,分為 5,2 和 1,7 兩個子陣列,...

歸併排序遞迴實現

對於歸併排序,不僅有遞迴的實現方式,還有迭代的實現方式。迭代法實現歸併排序的 如下 include include define max size 10 實現歸併,並將最後的資料放入到list1中 void merging int list1,int list1 size,int list2,int...