Java實現歸併排序

2021-06-23 10:05:04 字數 1220 閱讀 9576

剛開始接觸歸併排序的時候,感覺挺困難的,但是仔細的分析之後,就會發現它的原理還是蠻簡單的:就是借助另外的乙個陣列空間將左右兩側(從中間mid處劃分)已經排序好的原陣列轉到新的陣列空間。如下圖所示:

轉移操作時,就是左右所指的資料進行比較,將較小的資料(由小到大排序)儲存到新的陣列空間。如下圖所示:

了解了原理,剩下的就是將原來的無序陣列轉化為左右兩側為有序排列的陣列,方法如下:

將無序陣列一分為二,再將左側和右側兩部分再次分別進行劃分(即二分為四),以此類推,直到每組元素個數為乙個或兩個就可以進行比較,返回有序的陣列,依次向上組合就可以得到左右有序的陣列。

**如下:

//歸併排序

public class guibingpaixu ;

arrs=g.sort(arrs);

for(int i:arrs)

} public int sort(int arrs)

int middle = arrs.length % 2 == 0 ? arrs.length / 2 : (arrs.length - 1) / 2; //取得中間位置

int left = arrays.copyofrange(arrs, 0, middle); //得到左側陣列

int right = arrays.copyofrange(arrs, middle, arrs.length); //得到右側陣列

int lres = sort(left); //遞迴對左側進行分組(1分為2)

int rres = sort(right); //遞迴對右側進行分組(1分為2)

return merge(lres, rres); //用左右比較的方法得到有序陣列

}private int merge(int lres, int rres) else

}if(l == lres.length)

return res;

}if(r == rres.length)

return res;

}return res;}}

歸併排序 Java實現

歸併排序 mergesort 1 思想 多次將兩個或兩個以上的有序表合併成乙個新的有序表。2 演算法時間複雜度 最好的情況下 一趟歸併需要n次,總共需要logn次,因此為o n logn 最壞的情況下,接近於平均情況下,為o n logn 說明 對長度為n的檔案,需進行logn 趟二路歸併,每趟歸併...

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...