歸併排序 自底向上排序中的一點疑問理解

2021-10-02 13:56:09 字數 464 閱讀 5031

具體思想不介紹了,直入主題,**如下:

public

static

void

sort1

(comparable[

] a)

這裡我考慮了好久math.min(low+sz+sz-1,n-1)這一串取值的意思,以及為啥要-1;我理解的是,

1、首先為啥要用math.min函式是因為子陣列最後乙個下標值(low+sz+sz-1意思就是子陣列最後乙個下標值)在子陣列大小是整體陣列的二分之一甚至更多時,當分到第二個子陣列時,它的最後乙個下標值就會大於整體陣列,這樣就越界了,所以要比較一次。

2、-1是因為,這裡看的是陣列長度,第乙個值已經包含了再加上陣列長度的話就會比陣列長度多1,所以要減一。比如從1開始,陣列長度為2,那應該是1,2,如果不減1,陣列長度就成1+2為3了。

不知道理解的對不,要是有理解更清晰的,歡迎指正。

自底向上的歸併排序

先每兩個元素進行歸併,把它看作是元素個數為1的兩個區間,每兩個進行排序,然後按照每2個元素為乙個區間繼續排序,再按照每4個元素乙個區間進行歸併。1,2,4,8,16。自底向上的歸併排序 public static comparable void sortbu e arr 合併區間 arr l.mid...

歸併排序 自底向上的歸併排序演算法

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

鍊錶的自底向上歸併排序

鍊錶的自底向上歸併排序 應一 要求編寫了鍊錶的自底向上歸併排序程式如下 include include define less a,b a typedef int item typedef struct qnode qnode,link typedef struct queue void print...