日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java实现:归并排序

發布時間:2023/12/9 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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实现:归并排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。