归并排序(Merging Sort)- java实现

学习自严蔚敏、吴伟民的《数据结构》-清华大学出版

归并排序(Merging Sort)是又一类不同的排序方法。“归并”的含义是将两个或两个以上的有序表组合成一个新的有序表。

利用归并的思想容易实现排序。假设初始化序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2]个长度为2或1的有序序列;再两两归并……直到得到一个长度为n的有序序列为止,这种归并排序方法成为2-路归并排序。

public static void merge(int[] arr, int start, int mid, int end) {
	int[] newArr = Arrays.copyOf(arr, arr.length);
	int i = start, j = mid + 1, k = start;
	for (; i <= mid && j <= end; k++) {
		if (newArr[i] < newArr[j]) {
			arr[k] = newArr[i++];
		} else {
			arr[k] = newArr[j++];
		}
	}
	while (i <= mid) {
		arr[k++] = newArr[i++];
	}
	while (j <= end) {
		arr[k++] = newArr[j++];
	}
}
public static void mSort(int[] arr, int start, int end) {
	if (start < end) {
		int mid = (start + end) / 2;
		mSort(arr, start, mid);
		mSort(arr, mid + 1, end);
		merge(arr, start, mid, end);
	}
}

提示:递归形式的算法在形式上较简洁,但实用性很差。

与快速排序和堆排序相比,归并排序的最大特点是,它是一种稳定的排序方法。但在一般情况下,很少利用2-路归并排序法进行内部排序。

猜你喜欢

转载自blog.csdn.net/m0_37461645/article/details/83794872
今日推荐