欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java編程中實現(xiàn)歸并排序算法的實例教程

 更新時間:2016年05月04日 11:37:16   作者:然則  
這篇文章主要介紹了Java編程中實現(xiàn)歸并排序算法的實例教程,包括自底向上的歸并排序的實現(xiàn)方法介紹,需要的朋友可以參考下

算法概述/思路
歸并排序是基于一種被稱為“分治”(divide and conquer)的策略。其基本思路是這樣的:
1.對于兩個有序的數(shù)組,要將其合并為一個有序數(shù)組,我們可以很容易地寫出如下代碼:

//both a and b is ascend.
public void merge(int[] a, int[] b, int[] c){
  int i=0,j=0,k=0;
  while (i<=a.length && j<=b.length){
    if (a[i]<=b[i]){
      c[k++]=a[i++];
    }
    else{
      c[k++]=b[j++];
    }
  }
  while (i<=a.length){
    c[k++]=a[i++];
  }
  while (j<=b.length){
    c[k++]=b[j++];
  }
}

容易看出,這樣的合并算法是高效的,其時間復(fù)雜度可達到O(n)。
2.假如有一個無序數(shù)組需要排序,但它的兩個完全劃分的子數(shù)組A和B分別有序,借助上述代碼,我們也可以很容易實現(xiàn);
3.那么,如果A,B無序,怎么辦呢?可以把它們再分成更小的數(shù)組。
4.如此一直劃分到最小,每個子數(shù)組都只有一個元素,則可以視為有序數(shù)組。
5.從這些最小的數(shù)組開始,逆著上面的步驟合并回去,整個數(shù)組就排好了。
總而言之,歸并排序就是使用遞歸,先分解數(shù)組為子數(shù)組,再合并數(shù)組。

例子
下面舉例說明,假如要對數(shù)組a={2,1,3,5,2,3}進行排序,那么把數(shù)組劃分為{2,1,3}和{5,2,3}兩個子數(shù)組,這兩個子數(shù)組排序后變?yōu)閧1,2,3}和{2,3,5},然后對這兩個數(shù)組進行歸并操作便得到最終的有序數(shù)組。代碼實現(xiàn)如下:

void sort(int[] a) {
  int[] aux = new int[a.length];  //輔助數(shù)組
  mergeSort(a, 0, a.length - 1, aux);
}

void mergeSort(int[] a, int lo, int hi, int[] aux) {
  if (hi <= lo)
    return;
  int mid = lo + (hi - lo) / 2;
  mergeSort(a, lo, mid, aux);
  mergeSort(a, mid + 1, hi, aux);
  merge(a, lo, mid, hi, aux);

}

void merge(int[] a, int lo, int mid, int hi, int[] aux) {
  int i = lo, j = mid + 1;
  for (int k = lo; k <= hi; k++) {
    aux[k] = a[k];
  }
  for (int k = lo; k <= hi; k++) {
    if (i > mid)
      a[k] = aux[j++];
    else if (j > hi)
      a[k] = aux[i++];
    else if (aux[i] <= aux[j])
      a[k] = aux[i++];
    else
      a[k] = aux[j++];

  }
}

另一種實現(xiàn):自底向上的歸并排序
在上面的實現(xiàn)中,相當(dāng)于將一個大問題分割成小問題分別解決,然后用所有小問題的答案來解決整個大問題。將一個大的數(shù)組的排序劃分為小數(shù)組的排序是自頂向下的排序。還有一種實現(xiàn)是自底向上的排序,即先兩兩歸并,然后四四歸并......代碼實現(xiàn)如下:

void sort(int[] a) {
  int N = a.length;
  int[] aux = new int[N];
  for (int sz = 1; sz < N; sz += sz) {
    for (int lo = 0; lo < N - sz; lo += sz + sz) {
      //在每輪歸并中,最后一次歸并的第二個子數(shù)組可能比第一個子數(shù)組要小
      merge(a, lo, lo + sz - 1, Math.min(lo + sz + sz - 1, N - 1), aux);
    }
  }
}

相關(guān)文章

  • mybatis的mapper.xml中resultMap標(biāo)簽的使用詳解

    mybatis的mapper.xml中resultMap標(biāo)簽的使用詳解

    這篇文章主要介紹了mybatis的mapper.xml中resultMap標(biāo)簽的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Java中刪除文件或文件夾的幾種方法總結(jié)

    Java中刪除文件或文件夾的幾種方法總結(jié)

    這篇文章主要介紹了Java中刪除文件或文件夾的幾種方法總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • SpringBoot 使用Mongo的GridFs實現(xiàn)分布式文件存儲操作

    SpringBoot 使用Mongo的GridFs實現(xiàn)分布式文件存儲操作

    這篇文章主要介紹了Spring Boot 使用Mongo的GridFs實現(xiàn)分布式文件存儲操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringBoot?分模塊開發(fā)的操作方法

    SpringBoot?分模塊開發(fā)的操作方法

    這篇文章主要介紹了SpringBoot?分模塊開發(fā)的操作方法,通過在原項目新增一個maven模塊,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • Spring Boot中單例類實現(xiàn)對象的注入方式

    Spring Boot中單例類實現(xiàn)對象的注入方式

    這篇文章主要介紹了Spring Boot中單例類實現(xiàn)對象的注入方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java調(diào)用百度的接口獲取起-止位置的距離

    java調(diào)用百度的接口獲取起-止位置的距離

    本文主要介紹了java調(diào)用百度的接口獲取起-止位置的距離,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • springboot自定義日志注解的實現(xiàn)

    springboot自定義日志注解的實現(xiàn)

    本文主要介紹了springboot自定義日志注解的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java中Hashtable集合的常用方法詳解

    Java中Hashtable集合的常用方法詳解

    本篇文章給大家?guī)淼膬?nèi)容是關(guān)于Java中Hashtable集合的常用方法詳解,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。下面我們就來學(xué)習(xí)一下吧
    2021-11-11
  • JMeter配置元件詳解

    JMeter配置元件詳解

    JMeter提供了豐富的配置元件,常用的包括參數(shù)化配置元件、HTTP請求默認(rèn)值、HTTP信息頭管理器、計數(shù)器等,本文就詳細(xì)的介紹一下這些元件的使用,感興趣的可以了解一下
    2021-12-12
  • 關(guān)于@OnetoMany關(guān)系映射的排序問題,使用注解@OrderBy

    關(guān)于@OnetoMany關(guān)系映射的排序問題,使用注解@OrderBy

    這篇文章主要介紹了關(guān)于@OnetoMany關(guān)系映射的排序問題,使用注解@OrderBy,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論