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实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线性代数公式
- 下一篇: 中美线径对照表_AWG 与国际线径对照表