十大排序演算法之 歸併排序 五)

2021-10-08 00:00:48 字數 944 閱讀 4443

將兩個有序陣列進行歸併排序–>將陣列分成兩部分分別排序(遞迴)。

private

static

void

mergesort

(int

arr,

int left,

int right)

//將陣列分成兩部分

int mid = left +

(right - left)/2

;//對陣列左邊進行排序

mergesort

(arr, left, mid)

;//對陣列右邊進行排序

mergesort

(arr, mid +

1, right)

;//將兩個陣列進行歸併

merge

(arr, left, mid +

1, right);}

private

static

void

merge

(int

arr,

int left,

int right,

int rightbound)

else

}//當陣列的左部分沒有走完時 遍歷

while

(leftptr<=mid)

//當陣列的右部分還沒有走完時 遍歷

while

(rightptr<=rightbound)

//將temp陣列中排好序的值 覆蓋原陣列中的值

for(

int i =

0; i < temp.length; i++

)}

平均時間複雜度o(nlogn),最好時間複雜度o(nlogn),最壞時間複雜度o(nlogn),空間複雜度o(n),穩定。對於某種語言的內建物件排序演算法一般都是歸併排序及其改良版。

十大排序演算法 歸併排序

歸併排序是一種概念上最簡單的排序演算法,歸併排序是基於分治法的。歸併排序將待排序的元素序列分成兩個長度相等的子串行,為每乙個子串行排序,然後再將他們合併成乙個子串行。合併兩個子串行的過程也就是兩路歸併。1,申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列 2,設定兩個指標,最初位...

十大排序演算法之歸併排序5

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

十大排序演算法之歸併排序(MergeSort)

一 前言 資料結構與演算法,順便刷leetcode,無意間發現了乙個 我覺得講解的比較好的網頁,並且會拿leetcode裡面的題目當做例題,如有需要,奉上 五分鐘學演算法 二 演算法的介紹 分組,將序列的中的元素進行逐層折半分組,直到每組只有乙個元素。歸併,逐層向上排列每一層的元素的順序,然後合併成...