演算法學習(四) 歸併排序

2021-07-26 22:16:50 字數 1586 閱讀 2288

問題:給定陣列,進行排序。

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

實現:

package com.xueyou;

public class mergesort

system.out.println("");

}/**

* 合併兩個有序陣列,組成乙個新的有序陣列

* @param a

* 第乙個陣列開始下標

* @param s

* 第二個陣列開始下標

* @param m

* 第二個陣列結束下標

* @param t

*/public static void merge(int a, int s, int m, int t) else

k++;

}while (i < m)

while (j < t)

printarray(temp);

system.arraycopy(temp, 0, a, s, temp.length);

}/**

* 遞迴 實現合併

* @param a

* @param s

* @param len

*/public static void mergesort(int a, int s, int len)

for (int i = 0; i < times; i++)

//把剩下的一項歸到倒數第一中

if (whetherodd != 0)

mergesort(a, 0, len * 2);

}public static void main(string args) ;

printarray(a);

system.out.println("***************排序中**********====");

mergesort(a, 0, 1);

system.out.println("***************排序中**********====");

printarray(a);

system.out.println("偶數個:");

int b = ;

printarray(b);

system.out.println("***************排序中**********====");

mergesort(b, 0, 1);

system.out.println("***************排序中**********====");

printarray(b);}}

執行結果:

排序演算法學習 歸併排序

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

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

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

演算法學習筆記 歸併排序

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