java 實現二路歸併排序

2021-07-13 09:58:53 字數 806 閱讀 6673

歸併排序:是指將兩個或兩個以上有序的數列(或有序表),合併成乙個仍然有序的數列(或有序表)

**實現二路歸併排序如下:

public

class mergesort

/*將兩個子串行尚未處理完的部分複製到temp中*/

while(low1<=mid)

while(low2<=upper)

/*歸併完成,將temp中的元素複製回array中*/

for(pos=0,low1=low;low1<=upper;pos++,low1++)

}/*一趟歸併排序*/

public

void merge(int

array,int len,int n)

if(i+len-1

//對餘下的兩個子串行歸併

mergetwo(array,i,i+len-1,n-1);

}/*輸出每趟排序的結果*/

for(i=0;iarray[i]);

}system.out.println();

}/*二路歸併排序*/

public

void mergesort(int

array,int n)

}public

static

void main(string args) ; //把待排序的數存放在陣列中

int n=array.length;

mergesort ms=new mergesort();

ms.mergesort(array,n);

}}

歸併排序(二路歸併)

歸併排序是一種遞迴思想的體現,通過多次合併較小的幾個 二路歸併為兩個 有序陣列形成新的有序表。思路 將陣列分為n nn個一元組,兩兩合併得到二元組,以此類推共合併log 2n log 2n log2 n 次後,陣列變得有序。時間複雜度為o n logn o nlogn o nlog n 編譯環境de...

二路歸併排序

不是困難的演算法,不過也是練習了下遞迴。include include include using namespace std const int maxn 100 5 int a maxn int b maxn void mergesort int a,int b,int begin,int en...

二路歸併排序

二路歸併排序是將兩個有序表合併成乙個有序表的排序方法。其基本思想為 序列中有 n個記錄,可以看作為 n個有序子串行,每個序列長度為 1。首先將每相鄰的兩個記錄合併,得到 n 2 個較大的有序子串行,每個序列長度為 2。再將上述子串行兩兩合併,得到 n 2 2 個有序子串行,直至得到乙個長度為 n的有...