Java語言基礎day11(歸併排序)

2021-09-22 05:48:23 字數 2209 閱讀 3839

歸併排序演算法思想:

歸併排序(merge sort)就是利用歸併的思想實現排序的方法。它的原理是假設初始學列有n個記錄,則可以看成是n個有序的子串行,每個子串行的長度為1,然後兩兩歸併,得到 n/2 個長度為2或1的有序子串行,再兩兩歸併…如此重複,直至得到乙個長度為n的有序序列為止,這種排序方法稱為2路歸併排序。

分而治之:

歸併排序,該演算法採用經典的分治(divide-and-conquer)策略(分治法將問題分(divide)成一些小的問題然後遞迴求解,而治(conquer)的階段則將分的階段得到的各答案"修補"在一起,即分而治之

圖示:如圖所示:第一步

分解:將當前的無序序列一分為二,即求其中間點centerindex = (startindex + endindex) / 2。

求解:遞迴地對**的兩部分進行**…直到序列長度為1時停止。

合併:將分開的兩個有序的陣列合併為乙個陣列。

**實現:

private

static

void

chaifen

(int

arr,

int startindex,

int endindex)

}

合併有序的子串行:再來看看治階段,我們需要將兩個已經有序的子串行合併成乙個有序序列,比如上圖中的最後一次合併,要將[4,5,7,8]和[1,2,3,6]兩個已經有序的子串行,合併為最終序列[1,2,3,4,5,6,7,8],來看下實現步驟。

class 歸併排序 ;

////mergemethod(arr, 0, 3, arr.length - 1);

////上面歸併測試好,下來我們給乙個無序的陣列,進行拆分,然後歸併

int[

] arr =

;chaifen

(arr,

0, arr.length -1)

; system.out.

println

(arrays.

tostring

(arr));

}private

static

void

chaifen

(int

arr,

int startindex,

int endindex)

}/**

* @param arr 要歸併的陣列

* @param startindex 開始索引

* @param centerindex 中間元素所對應的索引 不是陣列長度除以2 是 (arr.length - 1)/2

* @param endindex 結束索引

*/private

static

void

mergemethod

(int

arr,

int startindex,

int centerindex,

int endindex)

else

index++

;//記得讓臨時陣列的的索引遞增

}//因為兩個序列的的元素個數,不是均等的,通過上面迴圈比較完後會有剩餘元素,可能左邊序列會有剩餘,也可能右邊元素會有剩餘

while

(i <= centerindex)

while

(j <= endindex)

//這個時候,排序好的元素就會放到臨時陣列中

// system.out.println(arrays.tostring(temparr));

//然後我們遍歷臨時陣列,將臨時陣列中的元素,放置到原陣列中

for(

int k =

0; k < temparr.length; k++)}

}

C 基礎程式設計DAY11

求乙個整數各位數之和的函式 include include using namespace std intgetsum int n return sum int main 寫乙個函式,判斷某個數是否素數,以及求1 1000以內的素數 include include include using nam...

基礎DAY11 模組import

hm 01 測試模組1 import hm 02 測試模組2 hm 01 測試模組1.say hello dog hm 01 測試模組1.dog print dog hm 02 測試模組2.say hello cat hm 02 測試模組2.cat print cat print hm 01 測試模...

Python基礎 裝飾器(Day11)

裝飾器 1.裝飾器是在不改變原函式的執行的情況下為原函式增額外的功能。簡單版裝飾器 import time deffunc1 print 執行速度 deftimmer f start time time.time f time.sleep 0.3 end time time.time print 此...