歸併演算法的遞迴和非遞迴實現

2021-07-22 16:41:51 字數 1144 閱讀 5914

package sort;

public class mergesort ;

int workspace = new int[sourcedata.length];

mergesort ms = new mergesort();

// ms.mergesort(sourcedata, workspace, 0, workspace.length - 1);

ms.mergesortbyloop(sourcedata, workspace);

for(int i: sourcedata)

system.out.print(i + " ");

system.out.println(); }

/***

* 遞迴法

*/public void mergesort(int data, int workspace, int low, int high) }

public void merge(int data, int workspace, int low, int mid, int high)

while(low <= mid)

workspace[index++] = data[low++];

while(rightlower <= high)

workspace[index++] = data[rightlower++];

for(int i = 0; i < index; i++)

data[copylow + i] = workspace[i]; }

/*** 非遞迴法

* 設定步長,從1開始,每次增加2的冪

* 對指定步長個數進行排序,分兩種情況

* 第一種:當前步長大小的陣列的末尾值小於陣列長度,即可以完整合並步長個數的情況

* 第二種:當前步長大小的陣列的末尾值超出陣列大小,則表明不能正好合併,也分兩種情況討論

* 第一:當剩餘的值小於或等於步長,排序的mid值的計算方法為先求和在除2

* 第二:當剩餘值大於step,下表計算方法為從i起乙個完整的步長大小

*/public void mergesortbyloop(int data, int workspace)

} }

}

遞迴和非遞迴實現歸併排序

1 遞迴實現歸併排序 遞迴排序其實也是利用了完全二叉樹的結構形式,所以時間複雜度和logn掛鉤的。具體遞迴版的歸併排序呢,看下面的 public class ms print s mergesort s system.out.println 排序後的陣列 print s public static ...

歸併排序的遞迴和非遞迴實現

歸併排序是乙個時間複雜度為o nlogn 的演算法,它可以由遞迴和非遞迴兩種方式實現。遞迴 includeusing namespace std void combine int nums,int l,int m,int r else while i m while j r k 0 for i l ...

演算法 歸併演算法的遞迴與非遞迴形式

歸併演算法是將兩個或兩個以上的有序表組合成乙個新的有序表,它的原理是 假設初始序列含有n個記錄,則可以看成是n個有序子串行,兩兩歸併,得到 n 2 個有序子串行,再次歸併 不斷重複直至歸併到長度為n的有序序列,這樣的排序方法稱為2路歸併排序。例項一 遞迴形式的2路歸併演算法 define maxsi...