归并排序

本文详细介绍了Java中快速排序与归并排序的实现方式,并通过实例对比了它们在处理不同大小数组时的性能表现。
public class MergeSort {
	public static void print(int[] c) {
		for (int i = 0; i < c.length; i++) {
			System.out.print(c[i] + " ");
		}
		System.out.println();
	}

	public static void merge(int[] a, int[] b, int[] c) {
		int i, j, k;
		for (i = 0, j = 0, k = 0; i < a.length && j < b.length; k++) {
			if (a[i] <= b[j]) {
				c[k] = a[i++];
			} else {
				c[k] = b[j++];
			}
		}
		while (i < a.length) {
			c[k++] = a[i++];
		}
		while (j < b.length) {
			c[k++] = b[j++];
		}
	}

	public static void merge(int[] array, int lFirst, int lEnd, int rFirst,
			int rEnd) {
		int temp[] = new int[lEnd - lFirst + rEnd - rFirst + 2];
		int i = lFirst, j = rFirst, k = 0;
		for (; i <= lEnd && j <= rEnd;) {
			if (array[i] <= array[j]) {
				temp[k++] = array[i++];
			} else {
				temp[k++] = array[j++];
			}
		}
		while (i <= lEnd) {
			temp[k] = array[i++];
			if (k == temp.length - 1)
				break;
			k++;
		}
		while (j <= rEnd) {
			temp[k] = array[j++];
			if (k == temp.length - 1)
				break;
			k++;
		}
		for (int m = lFirst, n = 0; m <= rEnd; m++, n++) {
			array[m] = temp[n];
		}
		temp = null;
	}

	private static void processMergeSort(int[] array, int first, int last) {
		if (first < last) {
			int mid = (first + last + 1) / 2;
			// 左序列
			processMergeSort(array, first, mid - 1);
			// 右序列
			processMergeSort(array, mid, last);
			merge(array, first, mid - 1, mid, last);
		}
	}

	public static void mergeSort(int[] array) {
		int length = array.length;
		processMergeSort(array, 0, length - 1);
	}

	public static void main(String[] args) {
		int[] a = new int[] { 2, 55, 6, 7, 11, 34, 33, 3333, 0, -1, -2, 34344,
				33, 21, 14 };
		int[] b = new int[99999];
		for (int i = 0; i < 99999; i++) {
			b[i] = 99999 - i;
		}
		long start = System.currentTimeMillis();
		mergeSort(b);
		long end = System.currentTimeMillis();
		System.out.println("耗时:" + (end - start) + "毫秒");
		// print(b);
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值