歸併排序及其分析

2021-06-22 22:12:06 字數 1518 閱讀 7505

歸併排序演算法實現

private static> void mergesort(anytype a,anytype tmparray,int left,int right){

if(leftint center = (left+right)/2;

mergesort(a,tmparray,left,center);

mergesort(a,tmparray,center+1,right);

merge(a,tmparray,left,center+1,right);

public static > void mergesort(anytype a){

anytype tmparray = (anytype) new comparable[a.length];

mergesort(a,tmparray,0,a.length-1);

private static > void merge(anytype a,anytype tmparray,int leftpos,int rightpos,int rightend){

int leftend = rightpos-1;

int tmppos = leftpos;

int numelements = rightend-leftpos+1;

while(leftpos <= leftend && rightpos <= rightend)

if(a[leftpos].compareto(a[rightpos])<=0)

tmparray[tmppos++]=a[leftpos++];

else

tmparray[tmppos++]=a[rightpos++];

while(leftpos<=leftend)

tmparray[tmppos++]=a[leftpos++];

while(rightpos<=rightend)

tmparray[tmppos++]=a[rightpos++];

for(int i=0;ia[rightend] = tmparray[rightend];

歸併排序執行時間o(nlogn),與同執行時間排序演算法相比,歸併排序的執行時間嚴重依賴於比較元素和在陣列中移動元素的相對開銷,這些開銷與語言無關。

歸併排序及其應用

歸併排序採用分治和遞迴的思想完成排序,簡單來說就是,將乙個規模較大的排序問題轉換成兩個較小規模的問題,最終形成兩個已經排好的序的子陣列,進而進行歸併即可。public class mergesort 左右兩邊排序,確定終中點 int mid left right left 1 mergesort a...

歸併排序分析

歸併排序 merge sort 是利用歸併的思想實現的排序方法,該演算法採用經典的分治 divide and conquer 策略 分治法將問題分 divide 成一些小的問題然後遞迴求解,而治 conquer 的階段則將分的階段得到的各答案 修補 在一起,即分而治之 網上一張圖 可以看到這種結構很...

歸併排序及其擴充套件問題

歸併排序是建立在歸併操作上的一種有效的排序演算法,是採用分治法 divide and conquer 的乙個非常典型的應用。後面的擴充套件題目,小和問題和逆序對個數問題,用文字真是解釋的稀爛,自己都看不下去。還是再紙上畫一畫,debug看一下 執行的流程會比較好。演算法 如下 public clas...