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...