演算法基礎 歸併排序

2021-08-03 14:40:21 字數 1177 閱讀 9434

歸併排序即將目標陣列分成n個最小的組(相鄰的2個數字),並將這些最小子陣列排序,依次合併相鄰的子陣列,最後各自有序的子陣列將會合併成完全有序的陣列。

這將需要用到遞迴思想。

static class mergesort

private

static

void

merge(int a, int start, int firstend, int secondend)

else

}//其中乙個子陣列已經遍歷完成,那麼將另乙個子陣列中剩下的元素也插入到tmp

while(index1 <= firstend)

while(index2 <= secondend)

for(int i = 0;i//將tmp陣列覆蓋目標陣列對應的部分

a[start++] = tmp[i];}}

}

最後使用隨機生成的陣列來測試下快速排序、氣泡排序、選擇排序和歸併排序的效率。

長度為25000的陣列:

快排和歸併還是很快的。

quicksort

time

:9bubblesort

time

:1231

selectionsort

time

:170

mergesort

time

:10

長度為50000的陣列:

快排和歸併依然保持在兩位數的時間。

quicksort

time

:20bubblesort

time

:4705

selectionsort

time

:676

mergesort

time

:16

長度為150000的陣列:

看到快排和歸併排序的優勢已經完全顯現了。

quicksort

time

:44bubblesort

time

:39902

selectionsort

time

:5766

mergesort

time

:29

演算法基礎 歸併排序

1.演算法描述 把原始的陣列分成若干的子陣列,對每乙個子陣列進行排序 繼續把子陣列與子陣列合併,合併後仍然有序,直到全部合併完成,形成有序的陣列。2.演算法實現 2.1.合併子陣列 param unsorted the unsorted array param first the start ind...

基礎演算法 歸併排序

def merge arr 這個函式是先把陣列進行分割,一直分,最後分成乙個數來呼叫第二個函式mergesort進行比較 如果陣列只有乙個數,直接就返回 if len arr 1 return arr mid len arr 2 left arr merge arr mid right arr me...

基礎排序演算法 歸併排序

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