Java实现:归并排序
生活随笔
收集整理的這篇文章主要介紹了
Java实现:归并排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- 將兩個有序的列表合并成一個有序的列表
????????????????開辟一個長度等同于兩個數組長度之和的新數組,并使用兩個指針來遍歷原有的兩個數? ? ? ? ? ? ? ? ? 組,不斷將較小的數字添加到新數組中,并移動對應的指針即可
- 拆分過程使用了二分的思想,這是一個遞歸的過程
為了減少在遞歸過程中不斷開辟空間的問題,我們可以在歸并排序之前,先開辟出一個臨時空間,在遞歸過程中統一使用此空間進行歸并即可
class Solution {//歸并排序public int[] sortArray(int[] nums) {//臨時數組resultint[] result=new int[nums.length];//歸并排序mergeSort(nums,0,nums.length-1,result);//此時nums與result相同return result;//此時nums與result相同}// 對 nums 的 [start, end] 區間歸并排序public void mergeSort(int[] nums,int start,int end,int[] result){// 只剩下一個數字,停止拆分if(start==end) return;int middle=(start+end)/2;// 拆分左邊區域,并將歸并排序的結果保存到 result 的 [start, middle] 區間mergeSort(nums,start,middle,result);// 拆分右邊區域,并將歸并排序的結果保存到 result 的 [middle + 1, end] 區間mergeSort(nums,middle+1,end,result);// 合并左右區域到 result 的 [start, end] 區間merge(nums,start,end,result);}// 將 nums 的 [start, middle] 和 [middle + 1, end] 區間合并public void merge(int[] nums,int start,int end,int[] result){//分割int middle=(start+end)/2;// 數組 1 的首尾位置int start1=start;int end1=middle;// 數組 2 的首尾位置int start2=middle+1;int end2=end;// 用來遍歷數組的指針int index1=start1;int index2=start2;// 結果數組的指針int resultIndex=start1;//比較插入結果數組while(index1<=end1 && index2<=end2){if(nums[index1]<=nums[index2]){result[resultIndex++]=nums[index1++];}else{result[resultIndex++]=nums[index2++];}}// 將剩余數字補到結果數組之后while(index1<=end1){result[resultIndex++]=nums[index1++];}while(index2<=end2){result[resultIndex++]=nums[index2++];}// 將 result 操作區間的數字拷貝到 arr 數組中,以便下次比較for(int i=start;i<=end;i++){nums[i]=result[i];}}}總結
以上是生活随笔為你收集整理的Java实现:归并排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NFC Reader Tool 蓝牙N
- 下一篇: java中 hashset_Java中的