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

歡迎訪問 生活随笔!

生活随笔

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

java

归并排序 Java实现 简单易懂

發布時間:2023/12/9 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 归并排序 Java实现 简单易懂 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歸并排序

歸并排序采用的是分治(divide-and-conquer)法思想。

1.基本思想:
將待排序元素分成大小大致相同的2個子集合,分別對2個子集合進行排序,最終將排好序的子集合合并成為所要求的排好序的集合。

2.執行過程:

3.時間復雜度
 對長度為n的文件,需進行趟二路歸并,每趟歸并的時間為O(n),故其時間復雜度無論是在最好情況下還是在最壞情況下均是O(nlgn)。
 
4.空間復雜度
  需要一個輔助向量來暫存兩有序子文件歸并的結果,故其輔助空間復雜度為O(n),顯然它不是就地排序。

5.代碼:

package sort;public class MergeSort {public static void merSort(int[] arr,int left,int right){if(left < right){int mid = (left+right)/2;merSort(arr,left,mid);//左邊歸并排序merSort(arr,mid+1,right);//右邊歸并排序merge(arr,left,mid,right);//合并兩個子序列}}private static void merge(int[] arr,int left,int mid,int right){int[] temp = new int[right - left + 1];//申請一個新的數組用來存儲int i = left;int j = mid + 1;int k = 0;while(i <= mid && j <= right){if(arr[i] < arr[j]){temp[k++] = arr[i++];}else{temp[k++] = arr[j++];}}while(i <= mid){temp[k++] = arr[i++];//左邊剩余填充進temp中}while(j <= right){temp[k++] = arr[j++];//右邊剩余填充進temp中}//將temp中的元素全部拷貝到原數組中for(int k2 = left;k2 < temp.length;k2++){arr[k2] = temp[k2];}}public static void main(String[] args) {int[] test = {9,2,6,3,5,7,10,11,12};merSort(test,0,test.length-1);for(int i = 0;i < test.length;i++){System.out.print(test[i] + " ");}} }

一定要注意:

while(i <= mid){temp[k++] = arr[i++];//左邊剩余填充進temp中}while(j <= right){temp[k++] = arr[j++];//右邊剩余填充進temp中}

是小于等于

6.穩定性
 歸并排序是一種穩定的排序

總結

以上是生活随笔為你收集整理的归并排序 Java实现 简单易懂的全部內容,希望文章能夠幫你解決所遇到的問題。

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