演算法(第四版)學習筆記之java實現歸併排序

來源:互聯網
上載者:User

標籤:歸併排序   java   

歸併排序思想:將一個數組分成兩部分分別排序(使用遞迴),然後將結果合并起來,即將最後兩個有序的數組歸併成一個更大的有序數組。

時間複雜度O(n) = NlogN

歸併排序最迷人的性質是它能保證將任意長度為N的數組排序所需時間和NlogN成正比,而缺點便是它所需的額外空間和N成正比。

歸併排序又分為自頂向下的排序方式和自底向上的排序方式:
自頂向下的排序方式是利用了分治的思想,將一個大問題分割成若干個等價的子問題進行求解;
自底向上的排序方式是先歸併那些微型數組,然後再成對歸併得到的子數組。
兩種排序方式的代碼如下:

/** *  * @author seabear * */public class MergeSort {private static Comparable[] b ;public static boolean less(Comparable v,Comparable w){return v.compareTo(w) < 0;}public static void merge(Comparable[] a,int lo,int mid,int hi){int i = lo;int j = mid + 1;for(int k = lo; k < hi + 1; k++){b[k] = a[k];}for(int k = lo; k < hi + 1; k++){if(i > mid){a[k] = b[j++];}else if (j > hi){a[k] = b[i++];}else if(less(b[i],b[j])){a[k] = b[i++];}else{a[k] = b[j++];}}}/** * 自頂向下和自底向上 * @param a  */public static void sort(Comparable[] a){b = new Comparable[a.length];//自頂向下//sort(a,0,a.length-1);//自底向上for(int i = 1; i < a.length; i = i + i){for(int lo = 0; lo < a.length - i; lo += i + i){merge(a, lo, lo + i - 1, Math.min(lo + i + i - 1, a.length - 1));}}}public static void sort(Comparable[] a,int lo,int hi){if(hi <= lo){return ;}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){for(int i = 0; i < a.length; i++){System.out.print(a[i] + " ");}System.out.println();}public static void main(String[] args){Integer[] a = new Integer[10];for(int i = 0; i < 10; i++){a[i] = (int)(Math.random() * 10 + 1);}show(a);sort(a);show(a);}}


著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

演算法(第四版)學習筆記之java實現歸併排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.