排序 歸併排序

2021-09-26 14:25:42 字數 1150 閱讀 7866

如果要排序乙個陣列,我們先把陣列從中間分成前後兩部分,然後對前後兩部分分別排序,再將排好序的兩部分合併在一起,這樣整個陣列就都有序了。

實現思路:

遞推公式:merge_sort(p..r) =  merge( merge_sort (p...q), merge-sort(q+1..r) )

終止條件:  p>=r不用再繼續分解

merge-sort(p...r)表示,給下標從p到r之間的陣列排序。我們將這個排序問題轉化為了兩個子問 ,題, merge_sort(p...q)和merge-sort(q+1..r),其中下標q等於p和r的中間位置,也就是, (p+r)/2,當下標從p到q和從q+1到r這兩個子陣列都排好序之後,我們再將兩個有序的子陣列合併在一起,這樣下標從p到r之間的資料就也排好序了。

**:

// 歸併排序演算法, a是陣列,n表示陣列大小

public static void mergesort(int a, int n)

// 遞迴呼叫函式

private static void mergesortinternally(int a, int p, int r)

private static void merge(int a, int p, int q, int r) else

}// 2 判斷哪個子陣列中有剩餘的資料

int start = i;

int end = q;

if (j <= r)

// 3 將剩餘的資料拷貝到臨時陣列tmp

while (start <= end)

// 4 將tmp中的陣列拷貝回a[p...r]

for (i = 0; i <= r-p; ++i)

}

merge是這樣執行的:

**分析:

排序 歸併排序

歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併 將兩個已經排好序的集合合併到乙個集合眾,並且保證新的集合也是有序的。核心點 只有乙個元素的集合是已經排好序的集合。歸併排序是建立在...

排序 歸併排序

歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。2 路歸併演算法 1.演算法基本思路 設兩個有序的子檔...

排序 歸併排序

利用遞迴的思想,當n 1時,只有乙個元素需要排序,為遞迴臨界條件 否則,遞迴的將前半部分資料和後半部分資料各自歸併排序,得到排序後的兩部分資料,然後再將得到的兩部分合併到一起。mergesort algorithm public void mergesort int data mergesort例程...