Java常用演算法之歸併排序

2021-08-08 12:20:29 字數 803 閱讀 4959

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

歸併過程為:比較a[i]和b[j]的大小,若a[i]≤b[j],則將第乙個有序表中的元素a[i]複製到r[k]中,並令i和k分別加上1;否則將第二個有序表中的元素b[j]複製到r[k]中,並令j和k分別加上1,如此迴圈下去,直到其中乙個有序表取完,然後再將另乙個有序表中剩餘的元素複製到r中從下標k到下標t的單元。歸併排序的演算法我們通常用遞迴實現,先把待排序區間[s,t]以中點二分,接著把左邊子區間排序,再把右邊子區間排序,最後把左區間和右區間用一次歸併操作合併成有序的區間[s,t]。 歸併

排序是穩定的排序,速度僅次於快速排序

。時間複雜度為o(nlog₂n) 這是該演算法中最好、最壞和平均的時間效能。

空間複雜度為 o(n),

比較操作的次數介於(nlogn) / 2和nlogn - n + 1。

賦值操作的次數是(2nlogn)。歸併演算法的空間複雜度為:0 (n)。

歸併排序比較占用記憶體,但卻是一種效率高且穩定的演算法。

public static void main(string args) ;

sort(array,0,array.length-1);

} public static void sort(int array,int left,int right)

{ int mid=(left+right)/2;

if(left

排序演算法之歸併排序java實現

歸併排序主要是二路歸併排序。二路歸併排序的基本思想是 設陣列a中存放了n個資料元素,初始時把它們看成是n個長度為1的有序子陣列,然後從第乙個子陣列開始,把相臨的子陣列兩兩合併,得到n 2個長度為2的新的有序子陣列 當n為奇數時最後乙個新的子陣列長度為1 對這些新的子陣列再兩兩合併 如此重複,直到得到...

排序演算法之歸併排序(Java 版本)

歸併排序是分治策略的應用之一,分而治之。時間複雜度為 o n log n 歸併排序的思想是 將佇列拆分為子佇列直到不可分,再將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。核心歸併排序的核心是分治思想和遞迴實現 演算法分析 實現注釋比較詳細,不做贅述 param ...

排序演算法之歸併排序(Java實現)

歸併排序的思想是將區域性有序的陣列合併為乙個大的有序陣列,前提是需要保證區域性陣列有序,如果區域性沒有順序,那麼就拆分,再合併,最差的情況是,拆到兩個陣列都只有乙個元素的時候,這時候再合併他們就成了乙個有序的陣列。涉及到演算法上,就是將陣列直接分為兩部分low mid,mid 1 high,其中mi...