3 4 自底向上的歸併排序演算法

2021-08-08 04:53:00 字數 1051 閱讀 6789

下面我們使用一種全新的思路來實現歸併排序演算法。

待排序的陣列為,8,6,2,3,1,5,7,4。

圖:自底向上的歸併排序演算法

以上我們使用的是「自頂向下」的歸併排序,下面我們介紹「自底向上」的歸併排序演算法。我們並不須要遞迴呼叫,只須要迭代就可以了。

下面展示了這種演算法的乙個框架。

for(int

size = 1;size,+n;size+=size)

**實現:

public

class

mergesortbu

implements

isortalgorithm

/*** 自底向上的歸併排序沒有了遞迴的棧呼叫

* 要特別注意邊界值的選取

* [0,1,2,3,4,5,6,7]

**@param arr 待排序陣列

*/@override

public

void

sort(int arr) }}

/*** 這一步與自頂向下的歸併排序無異

**@param arr

*@param left

*@param mid

*@param right

*/private

void

mergeoftwosortarray(int arr, int left, int mid, int right)

int len = right - left + 1;

int temp = new

int[len];

for (int i = 0; i < len; i++)

int i = 0;

int j = mid - left + 1;

for (int k = 0; k < len; k++) else

if (j > len - 1) else

if (temp[i] < temp[j]) else }}

}

歸併排序 自底向上的歸併排序演算法

歸併排序 merge sort 是建立在歸併操作上的一種有效,穩定的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。分解 將...

自底向上的歸併排序

先每兩個元素進行歸併,把它看作是元素個數為1的兩個區間,每兩個進行排序,然後按照每2個元素為乙個區間繼續排序,再按照每4個元素乙個區間進行歸併。1,2,4,8,16。自底向上的歸併排序 public static comparable void sortbu e arr 合併區間 arr l.mid...

演算法系列 自底向上歸併排序

思路 先歸併微型陣列,然後再成對歸併得到的子陣列,直到我們將整個陣列歸併到一起 先進行兩兩歸併 每個元素想象成大小為1的陣列 然後四四歸併,然後八八歸併。最後一次歸併的第二個子陣列可能比第乙個子陣列要小 merge方法可以解決此問題 對於長度為n的任意陣列,自底向上的歸併排序需要 1 2nlgn至n...