歸併排序及其應用

2021-08-29 01:46:30 字數 1304 閱讀 7931

歸併排序採用分治和遞迴的思想完成排序,簡單來說就是,將乙個規模較大的排序問題轉換成兩個較小規模的問題,最終形成兩個已經排好的序的子陣列,進而進行歸併即可。

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