归并排序(Merge Sort)是一种基于分治策略的排序算法。其基本思想是将一个大问题分解成小问题,然后递归求解,最后将小问题的解合并成大问题的解。归并排序是稳定的排序算法,并且具有较好的时间复杂度,通常为 O(n log n)。
以下是归并排序的基本步骤和Java代码实现:
基本步骤
-
分解 :将待排序序列分成两个子序列,直到每个子序列只有一个元素。
-
递归 :递归地对每个子序列进行排序。
-
合并 :将两个已排序的子序列合并成一个有序序列。
Java代码实现
public class MergeSort {
public static void main(String[] args) {
int[] array = {45, 4, 56, 3};
mergeSort(array, 0, array.length - 1);
System.out.println(Arrays.toString(array));
}
public static void mergeSort(int[] array, int left, int right) {
if (left < right) {
int mid = (left + right) / 2;
mergeSort(array, left, mid);
mergeSort(array, mid + 1, right);
merge(array, left, mid, right);
}
}
public static void merge(int[] array, int left, int mid, int right) {
int[] tempArray = new int[right - left + 1];
int i = left, j = mid + 1, k = 0;
while (i <= mid && j <= right) {
if (array[i] <= array[j]) {
tempArray[k++] = array[i++];
} else {
tempArray[k++] = array[j++];
}
}
while (i <= mid) {
tempArray[k++] = array[i++];
}
while (j <= right) {
tempArray[k++] = array[j++];
}
System.arraycopy(tempArray, 0, array, left, tempArray.length);
}
}
解释
-
mergeSort
方法是递归的,它将数组分成两部分,然后对每部分进行排序,最后合并排序好的两部分。 -
merge
方法负责合并两个已排序的子数组,创建一个临时数组来存储合并后的结果,并复制回原数组。
归并排序的时间复杂度为 O(n log n),空间复杂度为 O(n)。由于其稳定的特性和高效的性能,归并排序在许多场合都是首选的排序算法之一