歸併排序遞迴與非遞迴實現

2021-10-24 14:52:38 字數 1740 閱讀 9942

基本思路:

歸併排序(merge-sort)是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。

//歸併排序遞迴體,把整個序列遞迴分為兩個長度為1的子串行,然後對其子序列進行比較歸併。得到有序子串行

public

static

void

mergesort

(int

array,

int left,

int right)

/**

* 將切分的陣列進行歸併排序

* @param array 待排序陣列

* @param left 左邊陣列第乙個元素索引

* @param mid 左邊陣列最後乙個元素索引,mid為右邊陣列第乙個元素索引

* @param right 右邊陣列最後乙個元素索引

*/public

static

void

merge

(int

array,

int left,

int mid,

int right)

else

}//處理完,剩餘元素放進去。

while

(i < mid)

while

(j < right)

//從臨時陣列搬運到原陣列

for(

int t =

0;t < right - left;t++

)}

//歸併排序非遞迴實現

public

static

void

mergesort2

(int

array)

}}

測試**:

public

static

void

main

(string[

] args)

;//insertsort(array);

//shellsort(array);

//selectsort(array);

//heapsort(array);

//bubblesort(array);

//quicksort2(array);

mergesort2

(array)

; system.out.

println

(arrays.

tostring

(array));

}}

[2,

3,5,

6,7,

8,9]

附:常用排序演算法總結

歸併排序 遞迴與非遞迴實現

歸併排序 採用的是一種分而治之的思想.過程 將乙個陣列進行二分,直到有每組有乙個元素為止.然後進行合併元素,按照一定的順序進行排序.實現 遞迴實現 void merge int arr,int left,int mid,int right,int tmp int start left int end...

歸併排序(遞迴與非遞迴)

1.遞迴 把序列分成元素個數盡量相等的兩部分,再將兩半分別排序,合併有序的兩個序列 遞迴 void merge sort int a,int low,int heigh,int t a為待排序陣列,low,high分別為a的上下限 0 n 1 t為輔助陣列 for i low,j 0 i heigh...

歸併排序(遞迴與非遞迴)的實現

摘要 1 歸併排序幾乎以o nlogn 的時間界實現,是典型的分治演算法 2 歸併排序的基本思路很簡單 就是將目標序列分為兩個部分,將兩個子串行排序好之後,再將它們合併。注意到合併兩個已排序的序列只需要o n 的時間界。3 對兩個子串行的排序顯然也是通過遞迴的歸併排序實現的。4 需要注意的乙個小細節...