歸併排序:是指將兩個或兩個以上有序的數列(或有序表),合併成乙個仍然有序的數列(或有序表)
**實現二路歸併排序如下:
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的有...