排序之歸併排序

2022-05-07 11:18:11 字數 1214 閱讀 1548

歸併排序演算法思想:

分而治之(divide - conquer);每個遞迴過程涉及兩個步驟

第一, 分解: 把待排序的 n 個元素的序列分解成兩個子串行, 每個子串行包括 n/2 個元素.

第二, 合併: 合併兩個排好序的子串行,生成排序結果.

第一步:

public

static

void mergeinternal(int arr,int low,int

high)

第二步:

public

static

void merge(int arr,int p,int q,int

r) else

}//記錄當前i和q

int start =i;

int end =q;

//判斷後半部分是否全部加入tmp陣列中,沒有賦給分別將j和r賦給start和end

if(j<=r)

//把剩餘元素放在tmp後即可

while(start<=end)

//將tmp陣列值賦給原陣列

/*for(i = 0;i*/

system.arraycopy(tmp, 0, arr, p, tmp.length);

}

main函式:

public

static

void

main(string args) ;

system.out.println(arrays.tostring(arr));

mergeinternal(arr, 0, arr.length-1);

system.out.println(arrays.tostring(arr));

}

執行結果:

[11, 8, 3, 9, 7, 1, 2, 5]

[1, 2, 3, 5, 7, 8, 9, 11]

排序之歸併排序

歸併排序和快速排序的思想一樣,都是依據分治法 遞迴 兩者不同的是,歸併需要對子問題的解進行合併,即合併兩個已排序的表,合併的時間為線性的,最多進行了n 1次比較,其中n是元素的總數。歸併排序的基本思路就是將陣列分成二組a和b,如果這二組組內的資料都是有序的,那麼就可以很方便的將這二組資料進行排序。如...

排序之歸併排序

歸併排序還是有點雲裡霧裡 尤其是遞迴的時候的狀態樹與函式呼叫時的棧的狀態不太清楚,需要寫 加斷點做測試 先記錄下來,後面有時間再弄,先查到乙個用斷點測試後,描述歸併排序時遞迴狀態樹的部落格 其實如果按照 極客大學 演算法訓練營的覃超老師講的分治的模板,應該比較好寫出來 分治的模板 int divid...

排序之歸併排序

package mergesort import shellsort.shellsort import choosesort.example 歸併排序 歸併的含義 將兩個有序的陣列合併成乙個有序陣列 思想 通過遞迴的方法,將陣列不斷地分割,直到陣列裡只有乙個元素時返回。然後1 1歸併 2 2歸併 4...