Java算法中的歸并排序算法代碼實(shí)現(xiàn)
Java歸并排序算法
1、排序原理
歸并排序使用的是分治思想(Divide and Conquer),分治,顧名思義,就是分而治之,是將一個(gè)大問(wèn)題分解成小的子問(wèn)題來(lái)解決。小的子問(wèn)題解決了,大問(wèn)題也就解決了。
歸并排序的核心思想是:如果要排序一個(gè)數(shù)組,先把數(shù)組從中間分成前后兩部分,然后再分解,直到每個(gè)子序?qū)χ兄皇R粋€(gè)元素,最后通過(guò)遞歸,層層合并。
2、代碼實(shí)現(xiàn)
public static int[] mergeSort(int[] array) { if (array.length <=1) return array; //取數(shù)組的中間位置 int mid = array.length>>1; //數(shù)組拆分 int[] left = Arrays.copyOfRange(array, 0, mid); int[] right = Arrays.copyOfRange(array, mid, array.length); //遞歸調(diào)用 int[] result=merge(mergeSort(left), mergeSort(right)); return result; } /** * 合并, * @param left 拆分后左側(cè)數(shù)組 * @param right 拆分后右側(cè)數(shù)組 * @return */ public static int[] merge(int[] left, int[] right) { int[] result = new int[left.length + right.length]; int i=0,j=0; // i用來(lái)標(biāo)識(shí)左側(cè)數(shù)組 , j用來(lái)標(biāo)識(shí)右側(cè)數(shù)組 for (int index = 0; index < result.length; index++) { //如果i 大于左側(cè)數(shù)組,說(shuō)明左側(cè)已經(jīng)沒(méi)有多余的數(shù)組,將剩余的數(shù)據(jù)拷貝到臨時(shí)數(shù)組 if (i >= left.length) { result[index] = right[j++]; } //如果j大于右側(cè)數(shù)組,說(shuō)明右側(cè)已經(jīng)沒(méi)有多余的數(shù)組,將剩余的數(shù)據(jù)拷貝到臨時(shí)數(shù)組 else if (j >= right.length) { result[index] = left[i++]; } //比較兩個(gè)數(shù)組,如果左側(cè)大于右側(cè)數(shù)組,就將右側(cè)數(shù)組放入到臨時(shí)數(shù)組 else if (left[i] > right[j]) { result[index] = right[j++]; } else{//就將左側(cè)數(shù)組放入到臨時(shí)數(shù)組 result[index] = left[i++]; } } return result; }
到此這篇關(guān)于Java算法中的歸并排序算法代碼實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java歸并排序算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringMvc切換Json轉(zhuǎn)換工具的操作代碼
SpringBoot切換使用goolge的Gson作為SpringMvc的Json轉(zhuǎn)換工具,本文給大家講解SpringMvc切換Json轉(zhuǎn)換工具的操作代碼,感興趣的朋友一起看看吧2024-02-02Java 設(shè)計(jì)模式之責(zé)任鏈模式及異步責(zé)任鏈詳解
顧名思義,責(zé)任鏈模式(Chain of Responsibility Pattern)為請(qǐng)求創(chuàng)建了一個(gè)接收者對(duì)象的鏈。這種模式給予請(qǐng)求的類型,對(duì)請(qǐng)求的發(fā)送者和接收者進(jìn)行解耦。這種類型的設(shè)計(jì)模式屬于行為型模式2021-11-11Java如何通過(guò)反射獲取Constructor、Field、Method對(duì)象
反射指的是對(duì)象的反向處理操作,根據(jù)對(duì)象取得對(duì)象的來(lái)源信息,在反射的世界里面,看重的不再是一個(gè)對(duì)象,而是對(duì)象身后的組成,下面這篇文章主要給大家介紹了關(guān)于Java如何通過(guò)反射獲取Constructor、Field、Method對(duì)象的相關(guān)資料,需要的朋友可以參考下2022-06-06關(guān)于Springboot打成JAR包后讀取外部配置文件的問(wèn)題
這篇文章主要介紹了關(guān)于Springboot打成JAR包后讀取外部配置文件的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11Java中隊(duì)列Queue和Deque的區(qū)別與代碼實(shí)例
學(xué)過(guò)數(shù)據(jù)結(jié)構(gòu)的,一定對(duì)隊(duì)列不陌生,java也實(shí)現(xiàn)了隊(duì)列,下面這篇文章主要給大家介紹了關(guān)于Java中隊(duì)列Queue和Deque區(qū)別的相關(guān)資料,需要的朋友可以參考下2021-08-08淺談圖片上傳利用request.getInputStream()獲取文件流時(shí)遇到的問(wèn)題
下面小編就為大家?guī)?lái)一篇淺談圖片上傳利用request.getInputStream()獲取文件流時(shí)遇到的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11