归并排序

package chap2;

import java.util.ArrayList;
import java.util.List;

public class MergeSort {
	public static void merge(List<Integer> A,int p,int q,int r)//A[p,q]  A[q+1,r]合并这两个数组
	{
		int n1=q-p+1;//左边数组size
		int n2=r-q;//右边数组size
		List<Integer> L=new ArrayList<Integer>();
		List<Integer> R=new ArrayList<Integer>();
		for(int i=0;i<n1;i++)
		{
			L.add(A.get(p+i));//初始化L数组
		}
		for(int j=0;j<n2;j++)
		{
			R.add(A.get(q+j+1));//初始化R数组
		}
		for (int k = p,i=0,j=0; k <= r; k++) {//将L,R合并到A
			if (i==n1) {//L已全部比较完,将剩下的R全部拷贝到A中
				A.set(k, R.get(j++));
				continue;
			}
			if (j==n2) {//R已全部比较完,将剩下的L全部拷贝到A中
				A.set(k, L.get(i++));
				continue;
			}
			if (L.get(i)<=R.get(j)) {//将L,R中较小的放到A中
				A.set(k, L.get(i++));
			}else {
				A.set(k, R.get(j++));
			}
		}
	}
	
	public static List<Integer> mergeSort(List<Integer> A,int p,int r)
	{
		if (p<r) {
			int q=(p+r)/2;//采用2分
			mergeSort(A, p, q);//递归划分
			mergeSort(A, q+1, r);//递归划分
			merge(A, p, q, r);//合并
		}
		return A;
	}
	public static void main(String[] args) {
		List<Integer> A=new ArrayList<Integer>();
		A.add(8);
		A.add(9);
		A.add(1);
		A.add(2);
		A.add(10);
		A.add(3);
		A.add(0);
		A.add(300);
		mergeSort(A, 0, A.size()-1);
		for (Integer integer : A) {
			System.out.print(integer+" ");
		}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值