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

java 歸并排序的實(shí)例詳解

 更新時(shí)間:2017年07月14日 09:34:43   投稿:lqh  
這篇文章主要介紹了java 歸并排序的實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下

java 歸并排序的實(shí)例詳解

歸并排序

       歸并排序,指的是將兩個(gè)已經(jīng)排序的序列合并成一個(gè)序列的操作。 

歸并操作的過(guò)程如下:

  •  申請(qǐng)空間,使其大小為兩個(gè)已經(jīng)排序序列之和,該空間用來(lái)存放合并后的序列
  •  設(shè)定兩個(gè)指針,最初位置分別為兩個(gè)已經(jīng)排序序列的起始位置
  •  比較兩個(gè)指針?biāo)赶虻脑?,選擇相對(duì)小的元素放入到合并空間,并移動(dòng)指針到下一位置
  •  重復(fù)步驟3直到某一指針到達(dá)序列尾
  •  將另一序列剩下的所有元素直接復(fù)制到合并序列尾

Java代碼 

/** 
 * 歸并排序 
 * 
 * @param ts 
 */ 
@SuppressWarnings("unchecked") 
public static <T extends Comparable<? super T>> void mergeSort(T[] ts) { 
 
  // 輔助空間 
  T[] tempArray = (T[]) new Comparable[ts.length]; 
 
  mergeSort(ts, tempArray, 0, ts.length - 1); 
} 
 
/** 
 * 遞歸 
 */ 
private static <T extends Comparable<? super T>> void mergeSort(T[] ts, T[] tempArray, int left, int right) { 
 
  if (left < right) { 
 
    int center = (left + right) / 2; 
 
    mergeSort(ts, tempArray, left, center); 
 
    mergeSort(ts, tempArray, center + 1, right); 
 
    // 左右合并 
    merge(ts, tempArray, left, center + 1, right); 
 
  } 
 
} 
 
/** 
 * 合并 
 */ 
private static <T extends Comparable<? super T>> void merge(T[] ts, T[] tempArray, int leftPos, int rightPos, int rightEnd) { 
  int leftEnd = rightPos - 1; 
  int temPos = leftPos; 
  int numElements = rightEnd - leftPos + 1; 
 
  while (leftPos <= leftEnd && rightPos <= rightEnd) 
    //比較放到輔助空間 
    if (ts[leftPos].compareTo(ts[rightPos]) <= 0) 
      tempArray[temPos++] = ts[leftPos++]; 
    else 
      tempArray[temPos++] = ts[rightPos++]; 
 
  while (leftPos <= leftEnd) 
    tempArray[temPos++] = ts[leftPos++]; 
 
  while (rightPos <= rightEnd) 
    tempArray[temPos++] = ts[rightPos++]; 
 
  //考回原數(shù)組,此處最好用System.arraycopy優(yōu)化 
  for (int i = 0; i < numElements; i++, rightEnd--) 
    ts[rightEnd] = tempArray[rightEnd]; 
} 
 

 復(fù)雜度:O(n log n)

       比較操作的次數(shù)介于(n log n)/2和n log n - n + 1。 賦值操作的次數(shù)是(2nlogn)。

       歸并算法的空間復(fù)雜度為:Θ(n) 

 穩(wěn)定性:穩(wěn)定 

擴(kuò)展:

       在java中,當(dāng)執(zhí)行一次泛型排序時(shí),進(jìn)行一次元比較可能是昂貴的,但是移動(dòng)元素則是省時(shí)間的。歸并排序使用所有的流行的排序算法中最少的比較次數(shù),因此是使用java的通用排序算中的上好的選擇。

以上使用java 使用歸并排序的簡(jiǎn)單實(shí)例,有關(guān)java算法知識(shí)本站還有很多,大家可以搜索,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • java面試常問(wèn)的Runnable和Callable的區(qū)別

    java面試常問(wèn)的Runnable和Callable的區(qū)別

    大家好,本篇文章主要講的是java面試常問(wèn)的Runnable和Callable的區(qū)別,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 解決mybatis-plus自定義xml的坑

    解決mybatis-plus自定義xml的坑

    這篇文章主要介紹了解決mybatis-plus自定義xml的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Mybatis-Plus自動(dòng)生成的數(shù)據(jù)庫(kù)id過(guò)長(zhǎng)的解決

    Mybatis-Plus自動(dòng)生成的數(shù)據(jù)庫(kù)id過(guò)長(zhǎng)的解決

    這篇文章主要介紹了Mybatis-Plus自動(dòng)生成的數(shù)據(jù)庫(kù)id過(guò)長(zhǎng)的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java之MyBatis入門詳解

    Java之MyBatis入門詳解

    這篇文章主要介紹了Java之MyBatis入門詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 詳細(xì)分析Java內(nèi)部類——局部?jī)?nèi)部類

    詳細(xì)分析Java內(nèi)部類——局部?jī)?nèi)部類

    這篇文章主要介紹了Java局部?jī)?nèi)部類的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java 內(nèi)部類的知識(shí),感興趣的朋友可以了解下
    2020-08-08
  • 解決IDEA target文件夾越來(lái)越大的問(wèn)題

    解決IDEA target文件夾越來(lái)越大的問(wèn)題

    這篇文章主要介紹了解決IDEA target文件夾越來(lái)越大的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Java集合ArrayList與LinkedList詳解

    Java集合ArrayList與LinkedList詳解

    這篇文章主要介紹了Java集合ArrayList與LinkedList詳解,對(duì)于ArrayList和LinkedList,他們都是List接口的一個(gè)實(shí)現(xiàn)類,并且我們知道他們的實(shí)現(xiàn)方式各不相同,例如ArrayList底層實(shí)現(xiàn)是一個(gè)數(shù)組
    2022-08-08
  • Springboot配置過(guò)濾器實(shí)現(xiàn)過(guò)程解析

    Springboot配置過(guò)濾器實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了Springboot配置過(guò)濾器實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 巧用FutureTask 線程池輕松解決接口超時(shí)問(wèn)題

    巧用FutureTask 線程池輕松解決接口超時(shí)問(wèn)題

    這篇文章主要為大家介紹了使用FutureTask結(jié)合線程池輕松解決接口超時(shí)問(wèn)題的巧妙用法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 基于socket和javaFX簡(jiǎn)單文件傳輸工具

    基于socket和javaFX簡(jiǎn)單文件傳輸工具

    這篇文章主要介紹了基于socket和javaFX簡(jiǎn)單文件傳輸工具的相關(guān)資料,需要的朋友可以參考下
    2016-02-02

最新評(píng)論