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

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

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

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

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

非遞歸的代碼如下:

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;//歸并的前半部分數(shù)組
 int j = i + len;
 int len_j = j +len;//歸并的后半部分數(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ù)組長度
  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++];
 }
 }
}

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

package mergesort;

public class MergeSort {
 public static void mergeSort(int[] data,int left,int right){ //left,right均為數(shù)字元素下標
 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);
 }
}

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

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

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

相關文章

  • Java實現(xiàn)生成Excel樹形表頭完整代碼示例

    Java實現(xiàn)生成Excel樹形表頭完整代碼示例

    這篇文章主要介紹了Java實現(xiàn)生成Excel樹形表頭完整代碼示例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • 如何避免Apache?Beanutils屬性copy

    如何避免Apache?Beanutils屬性copy

    這篇文章主要為大家介紹了如何避免Apache?Beanutils屬性copy的分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • JMETER用戶變量作用域測試流程

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

    這篇文章主要介紹了JMETER用戶變量作用域測試流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • 新手入門Jvm--Jvm垃圾回收

    新手入門Jvm--Jvm垃圾回收

    JVM是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用于計算設備的規(guī)范,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現(xiàn)的
    2021-06-06
  • Java使用poi做加自定義注解實現(xiàn)對象與Excel相互轉換

    Java使用poi做加自定義注解實現(xiàn)對象與Excel相互轉換

    這篇文章主要介紹了Java使用poi做加自定義注解實現(xiàn)對象與Excel相互轉換,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • java分布式面試降級組件Hystrix的功能特性

    java分布式面試降級組件Hystrix的功能特性

    這篇文章主要為大家介紹了java分布式面試關于降級組件Hystrix的功能特性回答,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • spring cloud gateway跨域全局CORS配置方式

    spring cloud gateway跨域全局CORS配置方式

    這篇文章主要介紹了spring cloud gateway跨域全局CORS配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java SpringBoot模板引擎之 Thymeleaf入門詳解

    Java SpringBoot模板引擎之 Thymeleaf入門詳解

    jsp有著強大的功能,能查出一些數(shù)據(jù)轉發(fā)到JSP頁面以后,我們可以用jsp輕松實現(xiàn)數(shù)據(jù)的顯示及交互等,包括能寫Java代碼。但是,SpringBoot首先是以jar的方式,不是war;其次我們的tomcat是嵌入式的,所以現(xiàn)在默認不支持jsp
    2021-10-10
  • Java8新日期時間API的20個使用示例

    Java8新日期時間API的20個使用示例

    這篇文章主要介紹了Java8新日期時間API的20個使用示例,為了學習Java 8的這個新庫,這里我創(chuàng)建了20個以任務為導向的例子,需要的朋友可以參考下
    2015-03-03
  • Spring中@Configuration注解和@Component注解的區(qū)別詳解

    Spring中@Configuration注解和@Component注解的區(qū)別詳解

    這篇文章主要介紹了Spring中@Configuration注解和@Component注解的區(qū)別詳解,@Configuration 和 @Component 到底有何區(qū)別呢?我先通過如下一個案例,在不分析源碼的情況下,小伙伴們先來直觀感受一下這兩個之間的區(qū)別,需要的朋友可以參考下
    2023-09-09

最新評論