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

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

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

1.什么是分治算法

分治法

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

基本思想

分治法的基本思想:將一個難以直接解決的大問題,分割成一些規(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ù)組的當前元素下標
		while(l<=mid &&r<=right ) {//左邊或右邊沒結束
			//那邊小就將那邊的元素放入到臨時數(shù)組中
			if(arr[l]<=arr[r]) {
				temp[t++]=arr[l++];
			}else {
				temp[t++]=arr[r++];
			}
		}
		//while循環(huán)結束,說明有一邊已經(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++];
		}
	}
}

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

相關文章

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

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

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

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

    最近做項目時使用到了springboot+vue實現(xiàn)登錄功能的技術,所以下面這篇文章主要給大家介紹了關于springboot+vue實現(xià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標簽庫詳解

    Java的JSTL標簽庫詳解

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

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

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

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

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

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

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

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

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

    Java文件與Base64之間的轉化方式

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

最新評論

区。| 肇源县| 克什克腾旗| 得荣县| 大渡口区| 光泽县| 崇阳县| 乌兰县| 乡宁县| 永平县| 呼和浩特市| 抚州市| 富川| 玛沁县| 本溪| 澳门| 龙胜| 道孚县| 信丰县| 巩义市| 庆云县| 九龙城区| 如皋市| 同德县| 玛多县| 峡江县| 太谷县| 海宁市| 澄城县| 宝应县| 双桥区| 和平区| 奉化市| 昆明市| 碌曲县| 桐乡市| 诸暨市| 四子王旗| 行唐县| 乌苏市| 寻甸|