歸併排序思想:將乙個陣列分成兩部分分別排序(使用遞迴),然後將結果合併起來,即將最後兩個有序的陣列歸併成乙個更大的有序陣列。
時間複雜度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...