[java]歸併排序
package sort_book_datastruction;
import java.util.Arrays;
public class MergeSort {
/**
* 歸併排序
* 簡介:將兩個(或兩個以上)有序表合併成一個新的有序表 即把待排序序列分為若干個子序列,每個子序列是有序的。然後再把有序子序列合併為整體有序序列
* 時間複雜度為O(nlogn)
* 穩定排序方式
* @param nums 待排序陣列
* @return 輸出有序陣列
*/
public static int[] sort(int[] nums, int low, int high) {
int mid = (low + high) / 2;
if (low < high) {
// 左邊
sort(nums, low, mid);
// 右邊
sort(nums, mid + 1, high);
// 左右歸併
merge(nums, low, mid, high);
}
return nums;
}
public static void merge(int[] nums, int low, int mid, int high) {
int[] temp = new int[high - low + 1];
int i = low;// 左指標
int j = mid + 1;// 右指標
int k = 0;
// 把較小的數先移到新陣列中
while (i <= mid && j <= high) {
if (nums[i] < nums[j]) {
temp[k++] = nums[i++];
} else {
temp[k++] = nums[j++];
}
}
// 把左邊剩餘的數移入陣列
while (i <= mid) {
temp[k++] = nums[i++];
}
// 把右邊邊剩餘的數移入陣列
while (j <= high) {
temp[k++] = nums[j++];
}
// 把新陣列中的數覆蓋nums陣列
for (int k2 = 0; k2 < temp.length; k2++) {
nums[k2 + low] = temp[k2];
}
}
// 歸併排序的實現
public static void main(String[] args) {
int[] nums = { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 };
MergeSort.sort(nums, 0, nums.length-1);
System.out.println(Arrays.toString(nums));
}
}
相關文章
- java歸併排序Java排序
- Java實現歸併排序Java排序
- [排序] 歸併排序排序
- 歸併排序(java機試題)排序Java
- 歸併排序排序
- 快速排序&&歸併排序排序
- 四、歸併排序 && 快速排序排序
- 歸併排序模板排序
- 歸併排序--二路排序排序
- 排序演算法__歸併排序排序演算法
- 排序演算法:歸併排序排序演算法
- 歸併排序和基數排序排序
- 歸併排序--排序演算法排序演算法
- 排序演算法 - 歸併排序排序演算法
- 排序演算法——歸併排序排序演算法
- 排序演算法(歸併排序)排序演算法
- 歸併排序 js demo排序JS
- C# 歸併排序C#排序
- 【筆記】歸併排序筆記排序
- 歸併排序例項排序
- 利用java實現插入排序、歸併排序、快排和堆排序Java排序
- 排序演算法之 '歸併排序'排序演算法
- php實現 歸併排序,快速排序PHP排序
- php插入排序,快速排序,歸併排序,堆排序PHP排序
- go 實現歸併排序Go排序
- 歸併排序——C語言排序C語言
- 歸併排序 nO(lgn) 稽核中排序
- 歸併排序加例題排序
- 歸併排序求逆序數排序
- 連結串列歸併排序排序
- 排序(2)--選擇排序,歸併排序和基數排序排序
- 氣泡排序、歸併排序與快速排序比較排序
- 使用 Swift 實現歸併排序Swift排序
- 演算法之歸併排序演算法排序
- 歸併排序的簡單理解排序
- 【資料結構】歸併排序!!!資料結構排序
- 【資料結構】歸併排序資料結構排序
- O(lgn)的三種排序,快速排序、歸併排序、堆排序排序