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

Java 詳細講解分治算法如何實現(xiàn)歸并排序

 更新時間:2022年04月06日 14:29:24   作者:求不脫發(fā)  
分治算法的基本思想是將一個規(guī)模為N的問題分解為K個規(guī)模較小的子問題,這些子問題相互獨立且與原問題性質(zhì)相同。求出子問題的解,就可得到原問題的解,本篇文章我們就用分治算法來實現(xiàn)歸并排序

1.什么是分治算法

分治法

分治法,字面意思是“分而治之”,就是把一個復(fù)雜的1問題分成兩個或多個相同或相似的子問題,再把子問題分成更小的子問題直到最后子問題可以簡單地直接求解,原問題的解即子問題的解的合并,這個思想是很多高效算法的基礎(chǔ),例如排序算法(快速排序,歸并排序),傅里葉變換(快速傅里葉變換)等。

基本思想

分治法的基本思想:將一個難以直接解決的大問題,分割成一些規(guī)模較小的相同問題,以便各個擊破,分而治之。

2.分治算法的體現(xiàn)——歸并排序

歸并排序

歸并排序( MERGE - SORT )是利用歸并的思想實現(xiàn)的排序方法,該算法采用經(jīng)典的分治( divide - and - conquer )策略(分治法將問題分( divide )成一些小的問題然后遞歸求解,而治( conquer )的階段則將分的階段得到的各答案”修補”在一起,即分而治之)。

基本思想

流程圖(以對數(shù)組[8,4,5,7,1,3,6,2]排序為例)

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rGC5LiN6ISx5Y-R,size_20,color_FFFFFF,t_70,g_se,x_16

再來看看治階段,我們需要將兩個已經(jīng)有序的子序列合并成一個有序序列,比如上圖中的最后一次合并,要將

[4,5,7,8]和[1,2,3,6]兩個已經(jīng)有序的子序列,合并為最終序列[1,2,3,4,5,6,7,8],來看下實現(xiàn)步驟。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rGC5LiN6ISx5Y-R,size_20,color_FFFFFF,t_70,g_se,x_16

3.代碼實現(xiàn)

package Sort;
 
import java.util.Arrays;
/**
 * 歸并排序:
 * 
 * 利用歸并的思想實現(xiàn)的排序方法,該算法采用經(jīng)典的分治(divide-and-conquer)策略(分治法將問題分(divide)成一些小的問題然后遞歸求解,
 * 
 * 而治(conquer)的階段則將分的階段得到的各答案"修補"在一起,即分而治之)。
 * @author lenovo
 *
 */
public class MergeSort {
	public static void main(String[] args) {
		int[] a= {5,8,6,3,9,8,7,1,4,21,-8,46};
		int[] temp=new int[a.length];
		mergeSort(a, 0, a.length-1, temp);
		System.out.println(Arrays.toString(a));
	}
	public static void mergeSort(int[] arr,int left,int right,int[] temp) {
		if(left<right) {
			int mid=(left+right)/2;
			mergeSort(arr, left, mid, temp);
			mergeSort(arr, mid+1,right, temp);
			merge(arr, left, mid, right, temp);
		}
	}
	public static void merge(int[] arr,int left,int mid,int right,int[] temp) {
		int l=left;//左邊序列的起始位置
		int r=mid+1;//右邊序列的起始位置
		int t=0;//中間數(shù)組的當(dāng)前元素下標(biāo)
		while(l<=mid &&r<=right ) {//左邊或右邊沒結(jié)束
			//那邊小就將那邊的元素放入到臨時數(shù)組中
			if(arr[l]<=arr[r]) {
				temp[t++]=arr[l++];
			}else {
				temp[t++]=arr[r++];
			}
		}
		//while循環(huán)結(jié)束,說明有一邊已經(jīng)遍歷完畢,將另一邊剩余的元素放入到臨時數(shù)組中
		while(l<=mid) {
			temp[t++]=arr[l++];
		}
		while(r<=right) {
			temp[t++]=arr[r++];
		}
		//將臨時數(shù)組中的有序序列copy到原數(shù)組中
		t=0;
		int templeft=left;
		while(templeft<=right) {
			arr[templeft++]=temp[t++];
		}
	}
}

到此這篇關(guān)于Java 詳細講解分治算法如何實現(xiàn)歸并排序的文章就介紹到這了,更多相關(guān)Java 歸并排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 聊一聊SpringBoot服務(wù)監(jiān)控機制

    聊一聊SpringBoot服務(wù)監(jiān)控機制

    這篇文章主要介紹了聊一聊SpringBoot服務(wù)監(jiān)控機制,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • springboot+vue實現(xiàn)登錄功能的最新方法整理

    springboot+vue實現(xiàn)登錄功能的最新方法整理

    最近做項目時使用到了springboot+vue實現(xiàn)登錄功能的技術(shù),所以下面這篇文章主要給大家介紹了關(guān)于springboot+vue實現(xiàn)登錄功能的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • java實現(xiàn)多客戶聊天功能

    java實現(xiàn)多客戶聊天功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)多客戶聊天功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 從JVM的內(nèi)存管理角度分析Java的GC垃圾回收機制

    從JVM的內(nèi)存管理角度分析Java的GC垃圾回收機制

    這篇文章主要介紹了從JVM的內(nèi)存管理角度分析Java的GC垃圾回收機制,帶有GC是Java語言的重要特性之一,需要的朋友可以參考下
    2015-11-11
  • Java的JSTL標(biāo)簽庫詳解

    Java的JSTL標(biāo)簽庫詳解

    JSTL包含用于編寫和開發(fā)JSP頁面的一組標(biāo)準(zhǔn)標(biāo)簽,它可以為用戶提供一個無腳本環(huán)境。在此環(huán)境中,用戶可以使用標(biāo)簽編寫代碼,而無須使用Java腳本
    2023-05-05
  • Java8新特性之泛型的目標(biāo)類型推斷_動力節(jié)點Java學(xué)院整理

    Java8新特性之泛型的目標(biāo)類型推斷_動力節(jié)點Java學(xué)院整理

    泛型是Java SE 1.5的新特性,泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個參數(shù)。下面通過本文給分享Java8新特性之泛型的目標(biāo)類型推斷,感興趣的朋友參考下吧
    2017-06-06
  • Java使用RandomAccessFile類對文件進行讀寫

    Java使用RandomAccessFile類對文件進行讀寫

    本篇文章主要介紹了Java使用RandomAccessFile類對文件進行讀寫,詳細的介紹了RandomAccessFile類的使用技巧和實例應(yīng)用,有興趣的可以了解一下
    2017-04-04
  • Java開發(fā)工具-scala處理json格式利器-json4s詳解

    Java開發(fā)工具-scala處理json格式利器-json4s詳解

    這篇文章主要介紹了開發(fā)工具-scala處理json格式利器-json4s,文章中處理方法講解的很清楚,有需要的同學(xué)可以研究下
    2021-02-02
  • 一文深入理解Java中的深拷貝機制

    一文深入理解Java中的深拷貝機制

    在Java編程中,我們經(jīng)常需要處理對象的復(fù)制問題,深拷貝和淺拷貝是兩種常見的復(fù)制方式,它們在內(nèi)存管理和對象引用方面存在不同特點,本文將帶大家深入探究Java中的深拷貝機制,需要的朋友可以參考下
    2023-09-09
  • Java文件與Base64之間的轉(zhuǎn)化方式

    Java文件與Base64之間的轉(zhuǎn)化方式

    這篇文章介紹了如何使用Java將文件(如圖片、視頻)轉(zhuǎn)換為Base64編碼,以及如何將Base64編碼轉(zhuǎn)換回文件,通過提供具體的工具類實現(xiàn),作者希望幫助讀者更好地理解和應(yīng)用這一過程
    2025-02-02

最新評論

靖西县| 高唐县| 成安县| 双辽市| 永寿县| 闽清县| 凤山县| 三河市| 蒙山县| 山东| 扬州市| 克拉玛依市| 犍为县| 涟水县| 永善县| 临江市| 昌邑市| 丰宁| 余干县| 永州市| 滕州市| 丰顺县| 高州市| 神农架林区| 浦城县| 文昌市| 乐昌市| 临澧县| 新建县| 永定县| 苗栗市| 尖扎县| 金川县| 小金县| 乾安县| 沧州市| 息烽县| 方山县| 平顶山市| 固镇县| 尼勒克县|