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

Java排序算法總結(jié)之歸并排序

 更新時(shí)間:2015年05月19日 10:56:05   作者:一羽清寧  
這篇文章主要介紹了Java排序算法總結(jié)之歸并排序,較為詳細(xì)的分析了歸并排序的原理與java實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了Java排序算法總結(jié)之歸并排序。分享給大家供大家參考。具體分析如下:

歸并操作(merge),也叫歸并算法,指的是將兩個(gè)已經(jīng)排序的序列合并成一個(gè)序列的操作。和快速排序類似,讓我們一起來看,歸并在Java中的實(shí)現(xiàn)。

歸并排序(Merge)是將兩個(gè)(或兩個(gè)以上)有序表合并成一個(gè)新的有序表,即把待排序序列分為若干個(gè)子序列,每個(gè)子序列是有序的。然后再把有序子序列合并為整體有序序列。

歸并排序是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個(gè)非常典型的應(yīng)用。 將已有序的子序列合并,得到完全有序的序列;即先使每個(gè)子序列有序,再使子序列段間有序。若將兩個(gè)有序表合并成一個(gè)有序表,稱為2-路歸并。

歸并排序算法穩(wěn)定,數(shù)組需要O(n)的額外空間,鏈表需要O(log(n))的額外空間,時(shí)間復(fù)雜度為O(nlog(n)),算法不是自適應(yīng)的,不需要對數(shù)據(jù)的隨機(jī)讀取。

工作原理:

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

代碼實(shí)現(xiàn):

////////////////
public void mergeSort(){
 long[] workSpace = new long[nElems];
 recMergeSort(workSpace,0,nElems-1);
}
private void recMergeSort(long[] workSpace,int lowerBound,int upperBound){
 if(lowerBound == upperBound){
  return;
 }
 else{
  int mid=(lowerBound+upperBound)/2;
  recMergeSort(workSpace, lowerBound, mid);
  recMergeSort(workSpace, mid+1, upperBound);
  merge(workSpace, lowerBound, mid+1, upperBound);
 }
}
private void merge(long[] workSpace,int lowPtr,int highPtr,int upperBound){
 int j = 0;
 int lowerBound = lowPtr;
 int mid = highPtr - 1;
 int n = upperBound-lowerBound+1;
 while(lowPtr<=mid&&highPtr<=upperBound){
  if(theArray[lowPtr]<theArray[highPtr]){
  workSpace[j++]=theArray[lowPtr++];
  }
  else{
  workSpace[j++]=theArray[highPtr++];
  }
 }
 while(lowPtr<=mid){
  workSpace[j++] = theArray[lowPtr++];
 }
 while(highPtr<=upperBound){
  workSpace[j++] = theArray[highPtr++];
 }
 for(j=0;j<n;j++){
  theArray[lowerBound+j]=workSpace[j];
 }
}

歸并排序是比較穩(wěn)定的排序.即相等的元素的順序不會改變.如輸入記錄 1(1) 3(2) 2(3) 2(4) 5(5) (括號中是記錄的關(guān)鍵字)時(shí)輸出的 1(1) 2(3) 2(4) 3(2) 5(5) 中的2 和 2 是按輸入的順序.這對要排序數(shù)據(jù)包含多個(gè)信息而要按其中的某一個(gè)信息排序,要求其它信息盡量按輸入的順序排列時(shí)很重要.這也是它比快速排序優(yōu)勢的地方.

希望本文所述對大家的java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Java?詳解分析鏈表的中間節(jié)點(diǎn)

    Java?詳解分析鏈表的中間節(jié)點(diǎn)

    鏈表是基本的數(shù)據(jù)結(jié)構(gòu)之一,面試題中鏈表占很大一部分,可見鏈表操作是非常重要的。本篇文章我們來探究一下如何獲取鏈表的中間節(jié)點(diǎn)
    2022-01-01
  • MyBatis一次執(zhí)行多條SQL語句的操作

    MyBatis一次執(zhí)行多條SQL語句的操作

    這篇文章主要介紹了MyBatis一次執(zhí)行多條SQL語句的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • JMETER用戶變量作用域測試流程

    JMETER用戶變量作用域測試流程

    這篇文章主要介紹了JMETER用戶變量作用域測試流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Springmvc nginx實(shí)現(xiàn)動靜分離過程詳解

    Springmvc nginx實(shí)現(xiàn)動靜分離過程詳解

    這篇文章主要介紹了Springmvc nginx實(shí)現(xiàn)動靜分離過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot框架底層原理解析

    SpringBoot框架底層原理解析

    這篇文章主要介紹了SpringBoot底層原理,包括配置優(yōu)先級的配置方式給大家講解的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • Spring?Boot中調(diào)用外部接口的3種方式步驟

    Spring?Boot中調(diào)用外部接口的3種方式步驟

    這篇文章主要給大家介紹了關(guān)于Spring?Boot中調(diào)用外部接口的3種方式步驟,在Spring-Boot項(xiàng)目開發(fā)中,存在著本模塊的代碼需要訪問外面模塊接口,或外部url鏈接的需求,需要的朋友可以參考下
    2023-08-08
  • MyBatisPlus條件構(gòu)造器圖文實(shí)例詳解

    MyBatisPlus條件構(gòu)造器圖文實(shí)例詳解

    這篇文章主要介紹了MyBatisPlus條件構(gòu)造器,了解內(nèi)部原理是為了幫助我們做擴(kuò)展,同時(shí)也是驗(yàn)證了一個(gè)人的學(xué)習(xí)能力,如果你想讓自己的職業(yè)道路更上一層樓,這些底層的東西你是必須要會的
    2023-01-01
  • java創(chuàng)建線程的兩種方法區(qū)別

    java創(chuàng)建線程的兩種方法區(qū)別

    這篇文章主要為大家區(qū)分了java創(chuàng)建線程的兩種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 關(guān)于synchronized、volatile、ReentrantLock的區(qū)別與對比

    關(guān)于synchronized、volatile、ReentrantLock的區(qū)別與對比

    這篇文章主要介紹了關(guān)于synchronized、volatile、ReentrantLock的區(qū)別與對比,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • SpringBoot入門教程詳解

    SpringBoot入門教程詳解

    SpringBoot?是由?Pivotal?團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡化?Spring?應(yīng)用的初始搭建以及開發(fā)過程。本文將詳細(xì)為大家講講SpringBoot是使用,需要的可以參考一下
    2022-06-06

最新評論