演算法 第四版 學習筆記之java實現歸併排序

2021-07-04 01:56:12 字數 1060 閱讀 9674

歸併排序思想:將乙個陣列分成兩部分分別排序(使用遞迴),然後將結果合併起來,即將最後兩個有序的陣列歸併成乙個更大的有序陣列。

時間複雜度o(n) = nlogn

歸併排序最吸引人的性質是它能保證將任意長度為n的陣列排序所需時間和nlogn成正比,而缺點便是它所需的額外空間和n成正比。

歸併排序又分為自頂向下的排序方式和自底向上的排序方式:

自頂向下的排序方式是利用了分治的思想,將乙個大問題分割成若干個等價的子問題進行求解;

自底向上的排序方式是先歸併那些微型陣列,然後再成對歸併得到的子陣列。

兩種排序方式的**如下:

/**

* * @author seabear

* */

public class mergesort

public static void merge(comparable a,int lo,int mid,int hi)

for(int k = lo; k < hi + 1; k++)

else if (j > hi)

else if(less(b[i],b[j]))

else

}} /**

* 自頂向下和自底向上

* @param a

*/public static void sort(comparable a)

} }

public static void sort(comparable a,int lo,int hi)

int mid = lo + (hi - lo) / 2;

sort(a,lo,mid);

sort(a,mid + 1,hi);

merge(a,lo,mid,hi); }

public static void show(comparable a)

system.out.println(); }

public static void main(string args)

show(a);

sort(a);

show(a);

}}

演算法 第四版 之堆排序

堆排序是建立在堆的基礎上的,了解堆排序我們得先了解二叉堆.二叉堆是以二叉樹為基礎的,當一棵二叉樹的每個結點都大於等於它的兩個子節點數時,它被稱為堆有序.我們可以很容易的理解出,它的根節點是最大節點 二叉堆可以用指標和陣列兩種方式表示,本文用的是陣列的方式.我們在堆中有兩種操作方法,一種叫做上浮,一種...

《演算法(第四版)》排序 模板

本書對排序類演算法有乙個模板,包括了以下幾種方法 1 sort 這個方法裡面實現的就是排序的演算法 2 less 這個方法裡是利用了comparable介面裡的compareto方法,其中compareto方法對於本物件與傳入的比較物件小於,等於,大於,分別返回負數,0,正數 這個方法如果compa...

演算法 第四版 練習1 4 2

修改threesum,正確處理兩個較大的int值相加可能溢位的情況 首先jdk中定義int佔4個位元組,32位 後面全部的計算都是以此為根據的 32位就是jvm僅僅給分配32個格仔的空間,用以存放資料。總所周知計算機中用0和1存放資料。那麼,32個格仔中放滿0或1的方法 有2的32次方種 或者說32...