遞迴的歸併排序

2021-10-10 06:18:20 字數 849 閱讀 8609

利用遞迴的特性,先將當前序列的子串行並歸,再並歸當前序列

遞迴結束條件,當前序列的長度為1

並歸前乙個子串行

歸併後乙個子串行

對當前序列進行並歸

// 遞迴歸併排序演算法

void sort_mergesort(int* arr, int len, int mode)

// 遞迴並歸的執行函式

void sort_mergesort_main(int* arr, int* arr_tmp, int s, int e, int mode)

else

while(s_1 < e_1) arr[k++] = arr_tmp[s_1++];

while(s_2 < e_2) arr[k++] = arr_tmp[s_2++];

// 將並歸好的序列賦給原位址

for(int i = s; i <= e; i ++)}}

測試**
#define n 7

int main()

; sort_mergesort(arr, n, 1);

utils_print_arr(arr,0, n-1, "%2d ","公升序排列結果:\n", "\n\n");

sort_mergesort(arr, n, 0);

utils_print_arr(arr,0, n-1, "%2d ", "降序排列結果:\n", "\n");

return 0;

}

運算結果

歸併排序(遞迴 非遞迴 自然歸併排序)

演算法思想 歸併排序是分治法的典型應用,其思想是不斷地將兩個有序的陣列合併為乙個有序陣列。遞迴實現 include void merge int a,int left,int m,int right void mergesortaux int a,int left,int right void me...

歸併排序 遞迴

歸併排序 採用分治法 divide and conquer 分治法將問題分 divide 成一些小的問題然後遞迴求解,而治 conquer 的階段則將分的階段得到的各答案 修補 在一起,即分而治之 遞迴 合併即為歸併 歸併的應用 求逆序對 只需在合併函式中稍加改動 void mergearray i...

歸併排序 遞迴 非遞迴

首先簡單的介紹一下歸併演算法的核心思想 將我們將一組資料分成若干個組,即分到每組資料為1個元素的情況下就不用分了,然後在分別比較每兩組資料元素的大小,將其合併為一組資料再去和其他同等級別的組的資料元素取比較,然後合併到臨時的空間中然後在複製給原空間,依此類推,直到最後全部合併完畢,陣列就成為一組有序...