基礎排序演算法 歸併排序

2021-10-05 01:26:20 字數 973 閱讀 5076

把陣列從中間劃分成兩個子陣列,一直遞迴的把子陣列劃分成更小的子陣列,直到子陣列裡面只有乙個元素。依次按照遞迴的返回順序,不斷地合併排好序的子陣列,直到最後把整個陣列的順序排好。

public

class

mergesort

;sort

(nums,

0, nums.length -1)

; system.out.

println

(arrays.

tostring

(nums));

}public

static

void

sort

(int

nums,

int lo,

int hi)

int mid = lo +

(hi - lo)/2

;// 將陣列分為兩個部分

sort

(nums, lo, mid)

;// 陣列的左半部分

sort

(nums, mid +

1, hi)

;// 陣列的右半部分

merge

(nums, lo, mid, hi);}

public

static

void

merge

(int

nums,

int lo,

int mid,

int hi)

else

if(j > hi)

else

if(copy[j]

< copy[i]

)else}}

}

時間複雜度:o(nlogn)

空間複雜度:o(n),由於合併n個元素需要分配乙個大小為n的額外陣列,合併完成之後,這個陣列的空間會被釋放。

基礎排序演算法 歸併排序

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

演算法基礎 歸併排序

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

演算法基礎 歸併排序

歸併排序即將目標陣列分成n個最小的組 相鄰的2個數字 並將這些最小子陣列排序,依次合併相鄰的子陣列,最後各自有序的子陣列將會合併成完全有序的陣列。這將需要用到遞迴思想。static class mergesort private static void merge int a,int start,i...