演算法入門學習 2 1歸併排序

2021-08-15 03:41:17 字數 1748 閱讀 2692

分的演算法實現(遞迴):

傳入引數為

陣列(arr)、指向陣列最左邊的指標(left)、指向陣列最右邊的指標(right)、

空陣列(temp)(長度與原陣列一樣,用在這裡是方便將第一步也歸入遞迴步驟)

實現內容

當傳入的right>left,說明陣列可以再細分,於是取兩者的平均數(mid)。

這時將陣列分為兩組:一組是left到mid,另一組是mid+1到right,這兩組依次呼叫遞迴方法,直到right<=left。

第一次,每兩個數分為一組,並排序好。

第二次,將第一步中的每兩組和並成為一組,並排序好。

第三次,將第二步中的每兩組和並成為一組,並排序好。

...........................

治的演算法實現:

傳入引數

原陣列(arr)、要合併的兩個陣列的左指標(left)、要合併的兩個陣列的右指標(right)、

要合併的兩個陣列的中指標(mid)、空陣列(temp)。

注:上述的兩個陣列,在分的思路中,本來是屬於同乙個陣列,後面才分開:

所以左指標為第乙個陣列的最左,mid指標為第乙個陣列的最右;

右指標為第二個陣列的最右,mid+1指標為第二個陣列的最左。

實現內容

先拿第乙個陣列的

第乙個數(left)

和第二個陣列

的第乙個數(mid+1)

比較如果第乙個陣列的數

大於(小於)

第二個陣列的數,那麼將

第二(一)個陣列的數

放入新陣列(temp)的第一位。

接著第二(一)個陣列的

指標右移一位

,再次進行上述比較。

當出現某乙個陣列比較完的時候,將另乙個陣列

剩下的數全部加到temp中。

最後將比較好的陣列

傳遞給原來的陣列(arr)

int temp = new int[arr.length];//注意:int temp =arr 這樣的話,是將temp指向了arr所指向的陣列,當temp改變的時候,arr也會改變

sort(arr,0,arr.length-1,temp);

show(arr);

} public static void show(int arr)

} public static void sort(int arr,int left,int right,int temp)

while(right_left<=right)

while(left_left <=mid)

i=0;

while(left <= right) }}

歸併演算法 歸併排序

歸併演算法 歸併排序 這周需要用到歸併演算法,於是找了找相關的資料,整理如下 歸併排序 merge sort 是利用 歸併 技術來進行排序。歸併是指將若干個已排序的子檔案合併成乙個有序的檔案。兩路歸併演算法 1 演算法基本思路 設兩個有序的子檔案 相當於輸入堆 放在同一向量中相鄰的位置上 r low...

學習排序演算法5 歸併排序

此部落格為 部落格 歸併排序 思想 divide and conquer 分治法 將乙個陣列等分成兩個更小的陣列,將這兩個陣列排序後,再將它們歸併起來將得到乙個有序陣列 具體歸併方法就是從兩個陣列中從小到大放入大陣列中 時間複雜度 對於長度為n的任意陣列,自頂向下的歸併排序需要1 2n n至n n ...

排序演算法學習 歸併排序

歸併排序 merge sort 採用分治思想,將排序的過程分成乙個個子過程,當所有子過程完成時,排序也最終完成了。而歸併排序是將陣列不斷地二分,進而形成乙個個子過程。子過程,即歸併的過程如下圖演示,需要額外開闢一片空間進行複製乙份原陣列,然後兩邊逐一進行比較後進行歸併。至於它的時間複雜度,我們可以看...