java实现归并排序

package testSort;

/**
 * 归并排序算法思想:将两个已排序的子序列合并,形成一个已排序数据序列。
 * n个元素的数据序列可以看成是由n个长度为1的已排序子序列组成,反复将相邻的两个子序列归并成一个已排序的子序列
 * 直到合并成一个序列,排序完成。
 * n个元素的归并排序,每趟比较n-1次,时间复杂度为O(nlog2^n)。
 * 归并排序算法是稳定的。每次排序结果都能成为下一趟排序的依据。
 * @author 2萌
 *
 */
public class MergeSort {

	private static void merge(int[] array, int i, int n, int j) {
		
		int[] tempArray = new int[array.length];
		int m = n - 1;
		int k = i;
		int dataLen = j-i+1;
		while(i<=m && n<=j) {
			if(array[i] < array[n]) {
				tempArray[k++] = array[i++];
			} else if (array[i] == array[n]) {
				tempArray[k++] = array[i++];
				n++;
			} else if (array[i] > array[n]) {
				tempArray[k++] = array[n++];
			}
		}
		
		while(i<=m) {
			tempArray[k++] = array[i++];
		}
		while(n<=j) {
			tempArray[k++] = array[n++];
		}
		
		for (int k2 = 0; k2 < dataLen; k2++,j--) {
			array[j] = tempArray[j];
		}
	}

	
	private static void mergeSort(int[] array, int i, int j) {
		if(i>=j) {
			return;
		}
			int mid = (i+j)/2;

			//使用递归调用把数组分成两个子数组
			mergeSort(array, i, mid);
			mergeSort(array, mid+1, j);
			merge(array, i, mid+1,j);
		
	}
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {

		int[] array = {49,26,97,19,66,8,52};
		
		mergeSort(array,0,array.length-1);
		
		//打印排序后的数组
		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i]+"  ");
		}
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值