歸併排序採用分治和遞迴的思想完成排序,簡單來說就是,將乙個規模較大的排序問題轉換成兩個較小規模的問題,最終形成兩個已經排好的序的子陣列,進而進行歸併即可。
public class mergesort
//左右兩邊排序,確定終中點
int mid=left+((right-left)>>1);
mergesort(arr,left,mid);
mergesort(arr,mid+1,right);
merge(arr,left,mid,right);
}/**
* 合併兩個有序陣列,需要乙個額外的陣列來進行儲存
* 兩個指標分別指向兩個有序陣列的初始位置,乙個指標指向新生成陣列的位置
* @param arr
* @param left
* @param mid
* @param right
*/public static void merge(int arr,int left,int mid,int right)
//左右兩邊排序,確定終中點
int mid=left+((right-left)>>1);
return mergesort(arr,left,mid)
+mergesort(arr,mid+1,right)
+merge(arr,left,mid,right);
}/**
* 合併兩個有序陣列,需要乙個額外的陣列來進行儲存
* 兩個指標分別指向兩個有序陣列的初始位置,乙個指標指向新生成陣列的位置
* @param arr
* @param left
* @param mid
* @param right
*/public static int merge(int arr,int left,int mid,int right)
public static void sort(comparable a) }
}
詳細的非遞迴實現歸併排序
public static void sort(comparable a )else if(j>right)else if(less(b[i],b[j])<0)else}}
public static void show(comparable a)
}public static void main(string args) ;
// string a1=;
sort(a1);
show(a1);
}
歸併排序及其分析
歸併排序演算法實現 private static void mergesort anytype a,anytype tmparray,int left,int right if leftint center left right 2 mergesort a,tmparray,left,center ...
歸併排序及其擴充套件問題
歸併排序是建立在歸併操作上的一種有效的排序演算法,是採用分治法 divide and conquer 的乙個非常典型的應用。後面的擴充套件題目,小和問題和逆序對個數問題,用文字真是解釋的稀爛,自己都看不下去。還是再紙上畫一畫,debug看一下 執行的流程會比較好。演算法 如下 public clas...
歸併排序MergeSort及其變形
歸併排序其實 很容易理解,在我們將陣列中的元素從小到大排序的過程中,順便解決了乙個附加問題,即陣列中的逆序對有多少個 即對於陣列下標i,j,如果滿足i j 且 a i a j 則稱 i,j 為乙個逆序對 其實我們在排序的過程中,可以解決的不僅是逆序對的問題,由逆序對衍生的一系列問題 即對於陣列下標i...