排序演算法 歸併排序的兩種方法

2021-10-09 03:36:57 字數 1004 閱讀 3104

歸併排序是用分治思想,分治模式在每一層遞迴上有三個步驟:

分解(divide):將n個元素分成個含n/2個元素的子串行。

解決(conquer):用合併排序法對兩個子串行遞迴的排序。

合併(combine):合併兩個已排序的子串行已得到排序結果。

歸併排序時間複雜度o(nlogn),每次歸併處理n個,歸併logn次。

歸併排序空間複雜度o(n),其實是長度n的臨時陣列和logn的壓入棧的資料,預設就是o(n)了。

排序動畫參考

用遞迴實現:

private

void

mergesort

(int

arr,

int[

] temparr,

int start,

int end)

}void

mergesort

(int

arr,

int len)

用迭代實現:

思路:第一層for迴圈控制步長,第二層迴圈對每個排序單元進行排序。

為了方便理解,舉乙個例子:

假設有乙個長度為10的陣列要處理

for

(int seg =

1; seg < len; seg +

= seg)

}

實現

private

void

mergesort

(int

arr,

int len)

// 將排好序的陣列替換到原陣列上,繼續迴圈

int[

] temp = arr;

arr = temparr;

temparr = temp;}}

void

mergesort

(int

arr,

int len)

C語言兩種方法實現歸併排序

遞迴實現歸併排序思想 使用遞迴的方法來分元素 使用臨時陣列來儲存排好序的元素 把臨時陣列中的元素拷貝給原陣列 void mergeadd int arr,int left,int mid,int right,int temp else while i mid while j right 把temp中...

排序的兩種方法

如果adt需要比較大小,或者要放入collections或arrays進行排序,可實現comparator介面並override compare 函式。第一種 構建乙個新的comparator類,重寫compare 函式,在客戶端直接呼叫靜態函式collections.sort 新的comparat...

排序演算法 歸併排序

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。首先考慮下如何將將二個有序數列合併。這個非常簡單,只要從比較二個數列的第乙個數,誰小就先取誰,取了後就在對應數列中刪除這個數。然後再進行比較,如果有數列為空,那直接將另...