歸併排序 Java實現

2021-05-25 14:10:21 字數 1334 閱讀 5077

歸併排序(mergesort)

1、思想

多次將兩個或兩個以上的有序表合併成乙個新的有序表。

2、演算法時間複雜度 

最好的情況下:一趟歸併需要n次,總共需要logn次,因此為o(n*logn) 

最壞的情況下,接近於平均情況下,為o(n*logn) 

說明:對長度為n的檔案,需進行logn 趟二路歸併,每趟歸併的時間為o(n),故其時間複雜度無論是在最好情況下還是在最壞情況下均是o(nlgn)。

3、穩定性

歸併排序最大的特色就是它是一種穩定的排序演算法。歸併過程中是不會改變元素的相對位置的。

4、缺點是,它需要o(n)的額外空間。但是很適合於多鍊錶排序。

* @author administrator

* 並歸排序法

public class mergesort ;

mergesort(data, 0, data.length - 1); // 

printdata(data);

private static void mergesort(int data, int low, int high)

int mid = (low+high)/2;

mergesort(data,low,mid);

mergesort(data, mid+1, high);

merge(data,low,mid,high);

private static void merge(int data,int low,int mid,int high)else

}/** 若從data[low] 到 data[mid]遍歷完,則可能data[min+1]到data[high]的值還未遍歷完

* 並且這些值肯定比data[mid]大,且是有序的.直接追加到temp後即可 */

if(i>mid)

}/**同理上 */

if(j>high)

}/**把temp陣列的值並歸回data陣列 */

setdata(data,temp,low);

private static void setdata(int data,int temp,int low)else

}public static void printdata(int data)

system.out.println();

}

Java實現歸併排序

剛開始接觸歸併排序的時候,感覺挺困難的,但是仔細的分析之後,就會發現它的原理還是蠻簡單的 就是借助另外的乙個陣列空間將左右兩側 從中間mid處劃分 已經排序好的原陣列轉到新的陣列空間。如下圖所示 轉移操作時,就是左右所指的資料進行比較,將較小的資料 由小到大排序 儲存到新的陣列空間。如下圖所示 了解...

Java實現歸併排序

思想就是 將陣列分成兩個陣列,如果兩個陣列的元素都是有序的,那麼就可以很方便的將這兩組資料歸併。如果沒有序繼續將兩組陣列分組,以此類推,當組內只有乙個資料時,認為這個小組內已經有序,然後合併相鄰兩個小組就可以。package sort 歸併排序 2015 05 31 public class mer...

java實現歸併排序

1 歸併演算法 思想 假設初始序列含有n個記錄,進行兩兩歸併,得到長度為不小於n 2的最大整數個兩個一組或者乙個一組的有序序列 然後再進行二二歸併,知道完全有序。public static void mergingsort short arr,int low,int high 實現歸併演算法 pub...