歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列;即先使 每個子串行有序,再使子串行段間有序。
若將兩個有序表合併成乙個有序表,稱為 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 ...