其他排序 分治排序

2021-08-18 18:12:19 字數 752 閱讀 9556

歸併演算法是乙個非常經典的分治演算法,和快速排序有些類似,都是將問題分解成規模更小的子問題,分別解決。但是快速排序的子問題求解完成之後就是最優解,無需進行處理。歸併演算法需要對分別排序完成的子串行進行合併操作。

合併操作非常簡單,定義如下:每次取陣列a和b第乙個元素中較小者放入新的佇列,直到有個隊列為空,然後將另乙個佇列中的元素全部放入新的佇列。

當問題分解成只剩下乙個元素的子問題時,必然有序,成為問題分解的邊界。

**如下: 

package datastructureandalgorithms;

public class mergesort {

//temp 傳進來是省去每次重新new的開銷

public static void merge(int a, int first, int mid, int last, int temp) {

int index1 = first;

int index2 = mid + 1;

int k = first;

while(index1 <= mid && index2 <= last){

if(a[index1]輸出:

未排序陣列順序為:

4 2 8 9 5 7 6 1 3

-----------------------

-----------------------

經過歸併排序後的陣列順序為:

1 2 3 4 5 6 7 8 9

分治法排序

分治法排序 1 把大問題分為小問題 2 求每個小問題的解 3 和1反方向,把各個解合併起來 實現 1 啟用兩個快取,乙個放前半部份問題,乙個放後半部份問題 2 只用乙個大快取,用index的大小區分問題規模 include include void megre pre int pre,int fir...

分治法排序

include include define temp 10 int a temp int b temp void merge int low,int mid,int high else k while i mid while j high for i 0 i k i b low i a i int...

分治 快速排序

快速排序陣列元素的思想 1 設k a 0 將k挪到適當位置,使得比k小的元素都在k左邊,比k大的元素都在k右邊,和k相等的,不關心在k左右出現均可 o n 時間完成 2 把k左邊的部分快速排序 3 把k右邊的部分快速排序 class program quicksort a,0,a.length 1 ...