分治就是"分而治之",就是把乙個複雜的問題進行不斷的拆分,拆成兩個或者若干個相同或者相似的子問題,然後再把子問題分成更小的子問題.. 最後分到子問題可以單獨求解
分:首先將乙個無序的陣列拆分成若干部分(在此處的思路就是拆分成單個數為止)
治:然後將分離的數進行合併(合併的過程中進行比較排序),最後得到兩個有序的序列
最後再通過一些思路將兩個有序序列進行合併,得到最終結果
4-1:如何進行資料的拆分(採用遞迴的方式)
4-2:如何進行資料的合併(在這裡手寫了最後一次的過程..)
看波**,邏輯其實挺簡單,但是需要注意標誌位的移動
/**
* arr表示待排序的陣列
* left表示左邊有序序列的初始索引
* mid表示中間索引
* right表示右邊索引
* temp表示臨時陣列,起到中轉的作用**
*/public static void merge(int arr, int left, int mid, int right, int temp) else
}//此時一邊已經走完 另一邊還在繼續行進
//2.
//把有剩餘資料的一邊的資料依次全部填充到temp去
while (i <= mid)
while (j <= right)
//3.
//將temp的陣列的元素拷貝到arr
t=0;
int templeft=left;
int tempright=right;
while(templeft<=tempright)
}
4-3:如何進行資料的拆分(遞迴)
//歸併排序(遞迴)
public static void mergesort(int arr, int left, int right, int temp)
}
4-4:呼叫主方法
public static void main(string args) ;
int temp = new int[arr.length];
mergesort(arr, 0, arr.length - 1, temp);
system.out.println("歸併排序後" + arrays.tostring(arr));
}
4-5:測試結果:
4-6:完整**:
資料結構之歸併排序
介紹 歸併排序是建立在歸併操作上的一種有效的排序演算法,效率為o nlogn 歸併排序的實現分為遞迴實現與非遞迴 迭代 實現。遞迴實現的歸併排序是演算法設計中分治策略的典型應用,我們將乙個大問題分割成小問題分別解決,然後用所有小問題的答案來解決整個大問題。非遞迴 迭代 實現的歸併排序首先進行是兩兩歸...
資料結構之歸併排序
編寫乙個歸併排序程式,並在main函式中驗證結果 歸併排序 merging sort 是利用 歸併 技術進行排序,所謂歸併 是指將若干個已排序好的子表合併成乙個有序表 最簡單的歸併是將兩個有序的子表合併成乙個有序表。假設r low 到r mid 和r mid 1 到r high 是儲存在同乙個陣列中...
資料結構之歸併排序
話說天下大勢,分久必合,合久必分.那就讓我一統江山,將其合併吧 哇咔咔咔,廢話不多說了,歸併排序的 來啦.歸併畢竟相較之前的排序都會更複雜些,所以加了備註.寫注釋也是能獲得碼市好好公民獎的吧 public class merge 以起始下標和最大下標為準求出中間數,採用遞迴方式將陣列不斷分成左右兩邊...