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

歡迎訪問 生活随笔!

生活随笔

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

java

mergesort java_排序--归并排序MergeSort(Java实现)

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

原理簡述

歸并排序的基本思想是分治,基本原理就是將原數組分為兩部分,然后再將分開的數組在進行合并。

圖解

代碼

public class MergeSort {

/**

* 合并

* @param arr 排序數組

* @param start 開始索引

* @param m 中間位置索引

* @param end 結束索引

*/

static void merge(int[] arr,int start,int m,int end){

//分別計算兩個分組的長度

int n1 = m - start + 1;

int n2 = end - m;

//創建兩個輔助數組

int[] L = new int[n1];

int[] R = new int[n2];

//將原數組的元素拷貝到輔助數組中

for (int i = 0; i < n1; i++) {

L[i] = arr[start + i];

}

for (int j = 0; j < n2; j++) {

R[j] = arr[m+1+j];

}

//遍歷兩個數組,當其中任意一個數組遍歷完畢的時候停止循環

int i = 0,j = 0;

int k = start;

while (i

if (L[i]<=R[j]){

//當遍歷到的左邊數組元素小于等于遍歷到右邊的數組,原數組對應位置換為左邊數組遍歷到的值

arr[k] = L[i];

i++;

}else {

//當遍歷到的左邊數組元素大于遍歷到右邊的數組,原數組對應位置換為右邊數組遍歷到的值

arr[k] = R[j];

j++;

}

k++;

}

//將剩余的數組追加到原數組的尾部

while (i < n1){

arr[k] = L[i];

i++;

k++;

}

while (j < n2){

arr[k] = R[j];

j++;

k++;

}

}

static void sort(int[] arr,int start,int end){

if (start < end){

//中間索引

int m = (start + end)/2;

//遞歸前半部分數組

sort(arr, start, m);

//遞歸后后半部分數組

sort(arr, m+1, end);

//排序

merge(arr, start, m, end);

}

}

public static void main(String[] args) {

int[] arr = {2,5,7,9,3,6,7,3,1};

sort(arr, 0, arr.length-1);

for (int i : arr) {

System.out.print(i + " ");

}

}

}

算法分析

時間復雜度:O(n log n)

空間復雜度:O(n)

穩定性:穩定

總結

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

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