演算法學習 10 遞迴 之歸併排序

2021-08-31 04:29:19 字數 1484 閱讀 2106

package com.tw.dst.recursive;

/**

* * 演算法學習 ----遞迴

* 概念介紹:

* 歸併排序:歸併演算法的中心是歸併兩個已經有序的陣列,並且遞迴呼叫歸併操作。

* 歸併排序優點和缺點:比簡單排序在速度上快很多;歸併排序會占用雙倍的儲存空間。

* 歸併排序的效率:歸併排序的時間複雜度是 o(n*logn);簡單排序的複雜度是o(n2)。

* @author tangw 2010-12-13

*/

public class mergerecursion3

/*** 插入資料

* @param value

*/public void insert(long value)

/*** 顯示陣列中的資料

*/public void display()

}

/**

* 歸併排序演算法

*/

public void mergesort()

/*** 遞迴分割資料到基本單位

* @param workspace

* @param lowerbound

* @param upperbound

*/private void recmergesort(long workspace, int lowerbound, int upperbound) else

}

/*** 歸併操作將基本單位歸併成整個有序的陣列

* @param workspace

* @param lowptr

* @param highptr

* @param upperbound

*/private void merge(long workspace, int lowptr, int highptr, int upperbound) else

}

while (lowptr <= mid)

while (highptr <= upperbound)

for (j = 0; j < n; j++)

}public void println(string str)

public static void main(string args)

}/**

*

* 顯示排序前資料:

* 64, 21, 11, 33, 12, 85, 44, 99, 3, 0, 108, 36,

* 顯示排序後資料:

* 0, 3, 11, 12, 21, 33, 36, 44, 64, 85, 99, 108,

*/

/**

* 總結:

* 歸併排序比簡單排序的效率高很多

*/

遞迴演算法學習(歸併排序)

歸併排序是利用遞迴和分而治之的技術將資料序列劃分成為越來越小的半子表,再對半子表排序,最後再用遞迴步驟將排好序的半子表合併成為越來越大的有序序列,歸併排序包括兩個步驟,分別為 1 劃分子表 2 合併半子表 首先我們來討論歸併演算法,歸併演算法將一系列資料放到乙個向量中,索引範圍為 first,las...

排序演算法學習 歸併排序

歸併排序 merge sort 採用分治思想,將排序的過程分成乙個個子過程,當所有子過程完成時,排序也最終完成了。而歸併排序是將陣列不斷地二分,進而形成乙個個子過程。子過程,即歸併的過程如下圖演示,需要額外開闢一片空間進行複製乙份原陣列,然後兩邊逐一進行比較後進行歸併。至於它的時間複雜度,我們可以看...

演算法學習筆記 歸併排序

歸併排序 一種簡單的利用遞迴排序的演算法,將乙個陣列先 遞迴地 將它分成兩半分別排序,然後將兩半分別排序,然後將結果歸併起來。原地歸併的抽象方法 public static void merge int a,int lo,int mid,int hi 歸併回a lo.hi for int k lo ...