最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 歸并排序的實例詳解

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

java 歸并排序的實例詳解

歸并排序

       歸并排序,指的是將兩個已經排序的序列合并成一個序列的操作。 

歸并操作的過程如下:

  •  申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合并后的序列
  •  設定兩個指針,最初位置分別為兩個已經排序序列的起始位置
  •  比較兩個指針所指向的元素,選擇相對小的元素放入到合并空間,并移動指針到下一位置
  •  重復步驟3直到某一指針到達序列尾
  •  將另一序列剩下的所有元素直接復制到合并序列尾

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++]; 
 
  //考回原數組,此處最好用System.arraycopy優(yōu)化 
  for (int i = 0; i < numElements; i++, rightEnd--) 
    ts[rightEnd] = tempArray[rightEnd]; 
} 
 

 復雜度:O(n log n)

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

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

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

擴展:

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

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

相關文章

  • mybatisplus根據條件只更新一個字段的實現

    mybatisplus根據條件只更新一個字段的實現

    MyBatis-Plus提供使用update方法結合Wrapper來指定更新條件和要更新的字段,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-12-12
  • Java之Runnable啟動線程的使用方式

    Java之Runnable啟動線程的使用方式

    這篇文章主要介紹了Java之Runnable啟動線程的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • executor包執(zhí)行器功能

    executor包執(zhí)行器功能

    這篇文章主要介紹了executor包執(zhí)行器功能,executor包中的各個子包提供的功能,最終這些功能都由Executor接口及其實現類共同對外提供服務。下文介紹該執(zhí)行功能,具有一定的參考價值,需要的朋友可以考一下
    2022-02-02
  • Spring中配置ContextLoaderListener方式

    Spring中配置ContextLoaderListener方式

    這篇文章主要介紹了Spring中配置ContextLoaderListener方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • java案例實戰(zhàn)之字符串轉換為二進制

    java案例實戰(zhàn)之字符串轉換為二進制

    最近遇到個需求,要求編寫一個程序,從鍵盤錄入一個字符串,將字符串轉換為二進制數,下面這篇文章主要給大家介紹了關于java字符串轉換為二進制的相關資料,需要的朋友可以參考下
    2023-06-06
  • Springboot事務失效的幾種情況解讀

    Springboot事務失效的幾種情況解讀

    這篇文章主要介紹了Springboot事務失效的幾種情況解讀,因為Spring AOP默認使用動態(tài)代理,會給被代理的類生成一個代理類,事務相關的操作都通過代理來完成,使用內部方法調用時,使用的是實例調用,沒有通過代理類調用方法,因此事務不會檢測到失敗,需要的朋友可以參考下
    2023-10-10
  • Java實現的n階曲線擬合功能示例

    Java實現的n階曲線擬合功能示例

    這篇文章主要介紹了Java實現的n階曲線擬合功能,結合實例形式分析了Java基于矩陣的多項式曲線擬合相關操作技巧,需要的朋友可以參考下
    2018-01-01
  • 使用Spring?Boot?2.x構建Web服務的詳細代碼

    使用Spring?Boot?2.x構建Web服務的詳細代碼

    這篇文章主要介紹了使用Spring?Boot?2.x構建Web服務的詳細代碼,主要基于JWT的身份認證,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • springboot使JUL實現日志管理功能

    springboot使JUL實現日志管理功能

    這篇文章主要介紹了springboot使JUL實現日志管理功能,本文分步驟給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Java Metrics系統(tǒng)性能監(jiān)控工具的使用詳解

    Java Metrics系統(tǒng)性能監(jiān)控工具的使用詳解

    Metrics是一個Java庫,可以對系統(tǒng)進行監(jiān)控,統(tǒng)計一些系統(tǒng)的性能指標。本文就來和大家詳細聊聊這個工具的具體使用,希望對大家有所幫助
    2022-11-11

最新評論

水城县| 定远县| 镇平县| 安化县| 华宁县| 五华县| 光泽县| 太保市| 贵州省| 宝兴县| 嵊泗县| 商河县| 尼玛县| 嘉荫县| 潜江市| 邵阳县| 兰考县| 宁阳县| 惠安县| 临武县| 辛集市| 潜江市| 银川市| 宿松县| 北票市| 黔东| 云安县| 巴林右旗| 淮安市| 开远市| 罗田县| 安泽县| 西峡县| 互助| 樟树市| 永德县| 西宁市| 东港市| 北辰区| 北安市| 富阳市|