分的演算法實現(遞迴):
傳入引數為:
陣列(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 採用分治思想,將排序的過程分成乙個個子過程,當所有子過程完成時,排序也最終完成了。而歸併排序是將陣列不斷地二分,進而形成乙個個子過程。子過程,即歸併的過程如下圖演示,需要額外開闢一片空間進行複製乙份原陣列,然後兩邊逐一進行比較後進行歸併。至於它的時間複雜度,我們可以看...