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

Java排序算法三之歸并排序的遞歸與非遞歸的實(shí)現(xiàn)示例解析

 更新時(shí)間:2020年08月05日 16:54:25   作者:gavenyeah  
這篇文章主要介紹了Java排序算法三之歸并排序的遞歸與非遞歸的實(shí)現(xiàn)示例解析,文章通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

歸并有遞歸和非遞歸兩種。

歸并的思想是:
1.將原數(shù)組首先進(jìn)行兩個(gè)元素為一組的排序,然后合并為四個(gè)一組,八個(gè)一組,直至合并整個(gè)數(shù)組;
2.合并兩個(gè)子數(shù)組的時(shí)候,需要借助一個(gè)臨時(shí)數(shù)組,用來存放當(dāng)前的歸并后的兩個(gè)數(shù)組;
3.將臨時(shí)數(shù)組復(fù)制回原數(shù)組對(duì)應(yīng)的位置。

非遞歸的代碼如下:

package mergesort;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
//歸并排序的非遞歸算法
public class MergeSort{
 public static void main(String args[]){
 MergeSort mer = new MergeSort();
 int[] array = mer.getArray();
 System.out.println("OriginalArray:" + Arrays.toString(array));
 mer.mergeSort(array);
 System.out.println("SortedArray:" + Arrays.toString(array));
 }
 public int[] getArray(){
 Scanner cin = new Scanner(System.in);
 System.out.print("Input the length of Array:");
 int length = cin.nextInt();
 int[] arr = new int[length];
 Random r = new Random();
 for(int i = 0; i < length; i++){
  arr[i] = r.nextInt(100);
 }
 cin.close();
 return arr;
 }
 public void mergeSort(int[] a){
 int len = 1;
 while(len < a.length){
  for(int i = 0; i < a.length; i += 2*len){
  merge(a, i, len);
  }
  len *= 2;
 }
 }

 public void merge(int[] a, int i, int len){
 int start = i;
 int len_i = i + len;//歸并的前半部分?jǐn)?shù)組
 int j = i + len;
 int len_j = j +len;//歸并的后半部分?jǐn)?shù)組
 int[] temp = new int[2*len];
 int count = 0;
 while(i < len_i && j < len_j && j < a.length){
  if(a[i] <= a[j]){
  temp[count++] = a[i++];
  }
  else{
  temp[count++] = a[j++];
  }
 }
 while(i < len_i && i < a.length){//注意:這里i也有可能超過數(shù)組長(zhǎng)度
  temp[count++] = a[i++];
 }
 while(j < len_j && j < a.length){
  temp[count++] = a[j++];
 }
 count = 0;
 while(start < j && start < a.length){
  a[start++] = temp[count++];
 }
 }
}

遞歸算法的實(shí)現(xiàn)代碼如下:

package mergesort;

public class MergeSort {
 public static void mergeSort(int[] data,int left,int right){ //left,right均為數(shù)字元素下標(biāo)
 if(left<right){
  int half=(left+right)/2;
  mergeSort(data,left,half);
  mergeSort(data,half+1,right);
  merge(data,left,right);
 }
 }
 public static void merge(int []a,int l,int h){
 int mid=(l+h)/2;
 int i=l;
 int j=mid+1;
 int count=0;
 int temp[]=new int[h-l+1];
 while(i<=mid&&j<=h){
  if(a[i]<a[j]){
  temp[count++]=a[i++];
  }else{
  temp[count++]=a[j++];
  } 
 }
 while(i<=mid){
  temp[count++]=a[i++];
 }
 while(j<=h){
  temp[count++]=a[j++];
 }
 count=0;
 while(l<=h){
  a[l++]=temp[count++];
 }
 }
 public static void printArray(int arr[]){
 for(int k=0;k<arr.length;k++){
  System.out.print(arr[k]+"\t");
 }
 }
 public static int[] getArray(){
// int[] data={4,2,3,1};
 int[] data={543,23,45,65,76,1,456,7,77,88,3,9};
 return data;
 }

 public static void main(String args[]){
 int[]a=getArray();
 System.out.print("數(shù)組排序前:");
 printArray(a);
 System.out.print("\n");
 mergeSort(a,0,a.length-1);
 System.out.print("歸并排序后:");
 printArray(a);
 }
}

歸并排序的時(shí)間復(fù)雜度為O(n*log2n),空間復(fù)雜度為O(n)

歸并排序是一種穩(wěn)定的排序方法。

到此這篇關(guān)于Java排序算法三之歸并排序的遞歸與非遞歸的實(shí)現(xiàn)示例解析的文章就介紹到這了,更多相關(guān)Java排序算法之歸并排序的遞歸與非遞歸內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談JAVA如何生成UUID唯一標(biāo)識(shí)

    淺談JAVA如何生成UUID唯一標(biāo)識(shí)

    這篇文章主要介紹了淺談JAVA如何生成UUID唯一標(biāo)識(shí),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 一文教你如何更改IDEA已有項(xiàng)目的路徑/名稱

    一文教你如何更改IDEA已有項(xiàng)目的路徑/名稱

    由于IDEA項(xiàng)目路徑中有中文、空格等特殊符號(hào),影響正常使用,想要修改路徑名稱,怎么正確修改IDEA項(xiàng)目名稱,使其正常運(yùn)行呢?所以本文小編講給大家詳細(xì)的介紹了更改IDEA已有項(xiàng)目的路徑/名稱解決方案,需要的朋友可以參考下
    2023-11-11
  • java基礎(chǔ)類型源碼解析之多角度講HashMap

    java基礎(chǔ)類型源碼解析之多角度講HashMap

    這篇文章主要給大家介紹了關(guān)于java基礎(chǔ)類型源碼解析之HashMap的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java基具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 解析Springboot集成Tile38客戶端之Set命令實(shí)現(xiàn)示例

    解析Springboot集成Tile38客戶端之Set命令實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了解析Springboot集成Tile38客戶端之Set命令實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Gradle快速安裝及入門

    Gradle快速安裝及入門

    今天小編就為大家分享一篇關(guān)于Gradle快速安裝及入門,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Java中的"找不到符號(hào)"錯(cuò)誤解決辦法

    Java中的"找不到符號(hào)"錯(cuò)誤解決辦法

    開發(fā)中遇到一個(gè)問題,當(dāng)我用idea開發(fā)工具將新的項(xiàng)目代碼從GitLab上面拉取下來,所有的Maven依賴也導(dǎo)入成功,然后啟動(dòng)項(xiàng)目,結(jié)果報(bào)錯(cuò):java:找不到符號(hào),這篇文章主要給大家介紹了關(guān)于Java中"找不到符號(hào)"錯(cuò)誤的解決辦法,需要的朋友可以參考下
    2023-10-10
  • Java super和this的對(duì)比及使用

    Java super和this的對(duì)比及使用

    這篇文章主要介紹了Java super和this的對(duì)比及使用的相關(guān)資料,java中this與super會(huì)經(jīng)常在使用的時(shí)候混淆,需要的朋友可以參考下
    2017-08-08
  • Spring手寫簡(jiǎn)化版MVC流程詳解

    Spring手寫簡(jiǎn)化版MVC流程詳解

    Spring MVC是Spring Framework的一部分,是基于Java實(shí)現(xiàn)MVC的輕量級(jí)Web框架。本文將通過簡(jiǎn)單示例帶大家掌握SpringMVC簡(jiǎn)化版手寫方法,感興趣的可以了解一下
    2022-11-11
  • Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之醫(yī)院心理咨詢問診系統(tǒng)的實(shí)現(xiàn)

    Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之醫(yī)院心理咨詢問診系統(tǒng)的實(shí)現(xiàn)

    這是一個(gè)使用了java+Spring+Maven+mybatis+Vue+mysql開發(fā)的醫(yī)院心理咨詢問診系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有心理咨詢問診該有的所有功能,感興趣的朋友快來看看吧
    2022-01-01
  • springMVC如何將controller中數(shù)據(jù)傳遞到j(luò)sp頁(yè)面

    springMVC如何將controller中數(shù)據(jù)傳遞到j(luò)sp頁(yè)面

    這篇文章主要介紹了springMVC如何將controller中數(shù)據(jù)傳遞到j(luò)sp頁(yè)面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評(píng)論

章丘市| 藁城市| 莱西市| 屏东县| 武穴市| 日喀则市| 灵石县| 乐都县| 岳池县| 临武县| 东阳市| 平定县| 常德市| 芜湖县| 岳普湖县| 天门市| 罗定市| 宁河县| 泸溪县| 历史| 前郭尔| 汶上县| 阳高县| 万年县| 广元市| 阿勒泰市| 辽阳市| 南平市| 瑞金市| 栖霞市| 阳新县| 宜春市| 永康市| 安泽县| 昭苏县| 呼和浩特市| 金山区| 绥棱县| 新绛县| 来宾市| 郸城县|