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

java 算法之歸并排序詳解及實(shí)現(xiàn)代碼

 更新時(shí)間:2017年03月01日 16:01:16   投稿:lqh  
這篇文章主要介紹了java 算法之歸并排序詳解及實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下

java 算法之歸并排序詳解

一、思想

歸并排序:將一個(gè)數(shù)組排序,可以先(遞歸地)將它分成兩半部份分別排序,然后將結(jié)果歸并起來(lái);  

二、概念

歸并:將兩個(gè)有序的數(shù)組歸并成一個(gè)更大的有序數(shù)組;  

三、特點(diǎn)

優(yōu)點(diǎn):能夠保證將任意長(zhǎng)度為N的數(shù)組排序所需要的時(shí)間和NlogN成正比;

缺點(diǎn):需要額外的空間和N成正比; 

 四、實(shí)現(xiàn)方法

將兩個(gè)不同的有序數(shù)組歸并到第三個(gè)數(shù)組中;

先將前半部分排序,在將后半部分排序,然后在數(shù)組中移動(dòng)元素而不需要使用額外的空間; 

五、代碼

/** 
 * 歸并排序 
 *  
 * @author pengcx 
 *  
 */  
public class Merge extends Sort {  
  /** 歸并所需的輔助數(shù)組 */  
  private static Comparable[] aux;  
  
  public static void main(String[] args) {  
    String[] a = { "d", "a", "w", "b", "q" };  
    Merge.sort(a);  
    show(a);  
  }  
  
  public static void sort(Comparable[] a) {  
    aux = new Comparable[a.length];  
    sort(a, 0, a.length - 1);  
  }  
  
  /** 
  * 排序數(shù)組的a[lo]至a[hi]元素 
  *  
  * @param a 
  *      數(shù)組a 
  * @param lo 
  *      最小元素位置lo 
  * @param hi 
  *      最大元素位置hi 
  */  
  private static void sort(Comparable[] a, int lo, int hi) {  
    if (hi <= lo) {  
      return;  
    }  
  
    // 計(jì)算數(shù)組中間位置  
    int mid = lo + (hi - lo) / 2;  
    // 排序數(shù)組a左邊的元素  
    sort(a, lo, mid);  
    // 排序數(shù)組a右邊的元素  
    sort(a, mid + 1, hi);  
    // 合并數(shù)組a左邊和右邊的元素  
    merge(a, lo, mid, hi);  
  }  
  
  /** 
  * 將數(shù)組a的a[lo]至a[mid]的元素與a[mid]至a[hi]的元素合并 
  *  
  * @param a 
  *      合并的數(shù)組a 
  * @param lo 
  *      最小數(shù)組元素lo 
  * @param mid 
  *      中間元素位置mid 
  * @param hi 
  *      最大元素位置hi 
  */  
  public static void merge(Comparable[] a, int lo, int mid, int hi) {  
    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++];  
      }  
      // 如果右半邊的當(dāng)前元素小于左半邊的當(dāng)前元素,取右半邊元素  
      else if (less(aux[j], aux[i])) {  
        a[k] = aux[j++];  
      }  
      // 如果右半邊的當(dāng)前元素大于等于左半邊的當(dāng)前元素,取左半邊元素  
      else {  
        a[k] = aux[i++];  
      }  
    }  
  }  
}  

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • java實(shí)現(xiàn)堆排序以及時(shí)間復(fù)雜度的分析

    java實(shí)現(xiàn)堆排序以及時(shí)間復(fù)雜度的分析

    本文主要介紹了java實(shí)現(xiàn)堆排序以及時(shí)間復(fù)雜度,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 如何使用java判斷是不是數(shù)字

    如何使用java判斷是不是數(shù)字

    這篇文章主要給大家介紹了關(guān)于如何使用java判斷是不是數(shù)字的相關(guān)資料,判斷一個(gè)字符串是否為數(shù)字是Java開發(fā)中很常見的業(yè)務(wù)需求,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • win10下定時(shí)運(yùn)行與開機(jī)自啟動(dòng)jar包的方法記錄

    win10下定時(shí)運(yùn)行與開機(jī)自啟動(dòng)jar包的方法記錄

    這篇文章主要給大家介紹了關(guān)于win10下定時(shí)運(yùn)行與開機(jī)自啟動(dòng)jar包的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java的非阻塞隊(duì)列ConcurrentLinkedQueue解讀

    Java的非阻塞隊(duì)列ConcurrentLinkedQueue解讀

    這篇文章主要介紹了Java的非阻塞隊(duì)列ConcurrentLinkedQueue解讀,在并發(fā)編程中,有時(shí)候需要使用線程安全的隊(duì)列,如果要實(shí)現(xiàn)一個(gè)線程安全的隊(duì)列有兩種方式:一種是使用阻塞算法,另一種是使用非阻塞算法,需要的朋友可以參考下
    2023-12-12
  • Java反射及性能詳細(xì)

    Java反射及性能詳細(xì)

    這篇文章主要介紹了Java反射及性能,現(xiàn)如今的java工程中,反射的使用無(wú)處無(wú)在。無(wú)論是設(shè)計(jì)模式中的代理模式,還是紅透半邊天的Spring框架中的IOC,AOP等等,都存在大量反射的影子。下面我們就對(duì)該話題進(jìn)行詳細(xì)介紹,感興趣的小伙伴可以參考一下
    2021-10-10
  • Nacos+Spring Cloud Gateway動(dòng)態(tài)路由配置實(shí)現(xiàn)步驟

    Nacos+Spring Cloud Gateway動(dòng)態(tài)路由配置實(shí)現(xiàn)步驟

    Nacos最近項(xiàng)目一直在使用,本文通過(guò)gateway、nacos-consumer、nacos-provider三個(gè)簡(jiǎn)單模塊來(lái)展示:Nacos下動(dòng)態(tài)路由配置,,感興趣的小伙伴們可以參考一下
    2021-08-08
  • SpringBoot3 響應(yīng)式網(wǎng)絡(luò)請(qǐng)求客戶端的實(shí)現(xiàn)

    SpringBoot3 響應(yīng)式網(wǎng)絡(luò)請(qǐng)求客戶端的實(shí)現(xiàn)

    本文主要介紹了SpringBoot3 響應(yīng)式網(wǎng)絡(luò)請(qǐng)求客戶端的實(shí)現(xiàn),文章詳細(xì)闡述了如何使用SpringBoot3的網(wǎng)絡(luò)請(qǐng)求客戶端進(jìn)行HTTP請(qǐng)求和處理響應(yīng),并提供了示例代碼和說(shuō)明,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • java多態(tài)的向上轉(zhuǎn)型的概念及實(shí)例分析

    java多態(tài)的向上轉(zhuǎn)型的概念及實(shí)例分析

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于java多態(tài)的向上轉(zhuǎn)型的概念及實(shí)例分析,對(duì)此有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-05-05
  • Java中Spring Boot支付寶掃碼支付及支付回調(diào)的實(shí)現(xiàn)代碼

    Java中Spring Boot支付寶掃碼支付及支付回調(diào)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java中Spring Boot支付寶掃碼支付及支付回調(diào)的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • SpringSecurity JWT基于令牌的無(wú)狀態(tài)認(rèn)證實(shí)現(xiàn)

    SpringSecurity JWT基于令牌的無(wú)狀態(tài)認(rèn)證實(shí)現(xiàn)

    Spring Security中實(shí)現(xiàn)基于JWT的無(wú)狀態(tài)認(rèn)證是一種常見的做法,本文就來(lái)介紹一下SpringSecurity JWT基于令牌的無(wú)狀態(tài)認(rèn)證實(shí)現(xiàn),感興趣的可以了解一下
    2025-04-04

最新評(píng)論

庆城县| 贞丰县| 布拖县| 宝丰县| 团风县| 台东县| 望城县| 杭锦旗| 河曲县| 杂多县| 海林市| 若尔盖县| 木兰县| 共和县| 汤阴县| 邵阳县| 宜良县| 平昌县| 宜春市| 高台县| 泊头市| 巴楚县| 云南省| 乌什县| 水富县| 和政县| 阿克苏市| 安塞县| 贵德县| 罗定市| 密山市| 中卫市| 呼和浩特市| 辉南县| 永顺县| 民乐县| 乌兰察布市| 杨浦区| 大竹县| 秀山| 临西县|