歸併排序筆記

2021-09-16 12:39:21 字數 910 閱讀 7726

將兩個的有序數列合併成乙個有序數列,我們稱之為"歸併"。歸併排序:如果要將乙個陣列排序,可以先(遞迴地)將它們分成兩半進行排序,然後將結果歸併起來。

下面介紹另外兩種方法,分別是自頂向下歸併和自底向上歸併,圖示參考連線:

但是我感覺裡面的那個自下而上的演算法感覺有點複雜,所以我總結了演算法第四版上的**,如下:

// 該方法是用於將排序後的陣列歸併到一起

// 主要思路就是,將陣列歸併到乙個臨時陣列,然後再拷貝回原陣列

public void merge(int arr, int start, int mid, int end) else

} // 當左邊的陣列沒有遍歷完

while (i <= mid)

// 當右邊的陣列沒有遍歷完

while (j <= end)

// 將排序後的陣列全部整合到陣列arr中

for (i = 0; i < k; i++)

} // 自頂向下的排序方法

public void sortuptodown(int arr, int start, int end)

int mid = start + (end - start) / 2;// 這個好像是為了防止溢位

sortuptodown(arr, start, mid);

sortuptodown(arr, mid + 1, end);

merge(arr, start, mid, end);

} // 從下到上

public void sort(int arr, int start, int end)

} }

歸併排序的時間複雜度是o(n*lgn),這裡附上時間複雜度計算的參考連線:新增鏈結描述

空間複雜度為: o(n)

《演算法筆記》 歸併排序

歸併操作,也叫歸併演算法,指的是將兩個順序序列合併成乙個順序序列的方法,平均時間複雜度為o nlogn 歸併排序的實現分為遞迴實現與非遞迴 迭代 實現。如 設有數列 初始狀態 6,202,100,301,38,8,1 第一次歸併後 比較次數 3 第二次歸併後 比較次數 4 第三次歸併後 比較次數 4...

學習筆記 歸併排序

基本步驟 1 分界點 mid l r 2 2 遞迴排序 left,right 3 合二為一 include include include include include include include include include include include define ll long l...

演算法筆記 歸併排序

平均時間複雜度o nlogn 對於乙個待排序的陣列,我們可以先遞迴地將它分成兩半分別排序,然後將結果歸併起來。簡單的說就是把乙個陣列分成兩半,然後把這兩半分別排好序,最後將這兩部分合在一起進行排序,實際情況下,分成兩部分陣列的排序仍然是採用歸併的方式,所以我們會使用到遞迴的思想來操作。前提是待排序陣...