排序演算法 歸併排序流程分析

2021-10-07 04:21:23 字數 1430 閱讀 4176

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

若將兩個有序表合併成乙個有序表,稱為 2-路歸併,與之對應的還有多路歸 並。 對於給定的一組資料,利用遞迴與分治技術將資料序列劃分成為越來越小的 半子表,在對半子表排序後,再用遞迴方法將排好序的半子表合併成為越來越大 的有序序列。

為了提公升效能,有時我們在半子表的個數小於某個數(比如 15)的情況下, 對半子表的排序採用其他排序演算法,比如插入排序。

public

static

void

main

(string[

] args)

;int

sort =

sort

(arr)

; system.out.

println

(arrays.

tostring

(sort));

}// 使用遞迴進行處理 切分陣列,把陣列切割成最小的粒度

private

static

int[

]sort

(int

array)

if(array.length ==2)

return array;

}// 把陣列分成兩部分,持續分割,直到分割到符合自己設定的最小組合

int middle = array.length /2;

int[

] left = arrays.

copyofrange

(array,

0, middle)

;int

right = arrays.

copyofrange

(array, middle, array.length)

;return

mergearray

(sort

(left)

,sort

(right));

}/**

* @author charles

* @createtime 2020/6/13 12:57

* @desc 合併倆個已經排好順序的陣列

*/private

static

int[

]mergearray

(int

left,

int[

] right)

else

if(rightindex >= right.length)

else

if(left[leftindex]

> right[rightindex]

)else

}return resultarray;

}

歸併排序演算法分析

利用分治的思想,每一次把原陣列分為兩份,再進行對子陣列進行排序,最後對排好序的陣列進行合併,形成乙個新的有序序列。求中點 l到mid之間變為有序的 mergesort arr,l,mid mid 1到r之間變成有序的 mergesort arr,mid 1,r merge arr,l,mid,r p...

排序演算法 歸併排序

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

排序演算法 歸併排序

include include define status int define max 20 typedef struct elemtype typedef struct sqlist void inital sqlist l 初始化 bool lt int i,int j void merge ...