歸併排序(分治思想)

2021-06-22 21:09:32 字數 447 閱讀 3664

分治:

劃分問題:把序列分成元素個數盡量相等的兩半

遞迴求解:把兩半元素分別排序

合併問題:把兩個有序表合併成乙個

#include#include#include#includeusing namespace std;

void merge_sort(int *a,int x,int y,int *t)

{ if(y-x>1)

{int m=x+(y-x)/2; //劃分成左右兩半陣列

int p=x,q=m,i=x; //p記錄左半數組的最左邊位置,q記錄分界位置同時也是左半數組不可到達的右邊界,右半陣列的最左邊位置

merge_sort(a,x,m,t); //i也是記錄最左邊界

merge_sort(a,m,y,t);

while(p=y||(p

歸併排序(分治思想)

演示 具體的我們以一組無序數列 14,12,15,13,11,16 為例分解說明,如下圖所示 上圖中首先把乙個未排序的序列從中間分割成2部分,再把2部分分成4部分,依次分割下去,直到分割成乙個乙個的資料,再把這些資料兩兩歸併到一起,使之有序,不停的歸併,最後成為乙個排好序的序列。實現 include...

歸併排序(分治思想)

歸併排序 歸併排序 英語 merge sort,或mergesort 是建立在歸併操作上的一種有效的排序演算法。1945年由約翰 馮 諾伊曼首次提出。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用,且各層分治遞迴可以同時進行。由於歸併排序分治出來是一棵二叉樹,複雜度...

分治思想 歸併排序

分治的基本思想 將原任務分成幾個小任務 通常是兩個 來分別完成,然後再將完成的幾個任務經過處理後實現最終任務的完成。歸併排序的原理 1.將待排序的陣列分成兩半 2.將陣列的前一半和後一半分別排序。3.將兩半歸併到新的有序陣列,然後再拷貝回原來的陣列。排序完成。includeusing namespa...