Java实现归并排序

简述:

java实现归并排序


知识点:

1. 归并排序算法

2. Compare 接口实现

3. Java随机数


代码:

Comapre接口,

CompareTwoObject.java

package sort.algorithm;

public interface CompareTwoObject {
	boolean Compare(Object a, Object b);
}


归并排序,及测试函数,

MergeSortAlgorithm.java

package sort.algorithm;

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

public class MergeSortAlgorithm {
	//匿名内部类
	//使用Strategy模式 , 根据Object的不同决定不同的比较方法
	CompareTwoObject compareTwoObject = new CompareTwoObject(){
		@Override
		public boolean Compare(Object a, Object b) {
			if(a instanceof Integer && b instanceof Integer){
				Integer x = (Integer)a;
				Integer y = (Integer)b;
				if(x > y)
					return true;
			}
			return false;
		}
	};
	
	
	private List<Integer> list = new ArrayList<Integer>();
	
	public MergeSortAlgorithm(List<Integer> list){
		this.list = list;
	}
	
	private void Swap(int pos1, int pos2){
		Integer temp = list.get(pos2);
		list.set(pos2, list.get(pos1));
		list.set(pos1, temp);
	}
	
	private void MergeSort(int start, int end){
		//only two object compared
		if(end - start == 1){
			if(compareTwoObject.Compare(list.get(start), list.get(end))){
				Swap(start, end);
			}
		}else if(start != end){
			int middle = (start + end) / 2;
			MergeSort(start, middle - 1);
			MergeSort(middle, end);
			Merge(start, end);
		}
	}
	
	
	private void Merge(int start, int end){
		int middle = (start + end) / 2;
		int index1 = start;
		int index2 = middle;
		Integer[] tempArray = new Integer[end - start + 1];
		
		int index = 0;
		while(index1 < middle && index2 <= end){
			if(compareTwoObject.Compare(list.get(index1), list.get(index2))){
				tempArray[index++] = list.get(index2++);
			}else{
				tempArray[index++] = list.get(index1++);
			}
		}
		
		//collect the remaining elements to tempArray
		if(index1 != middle){
			for(int i = index1; i < middle; i++){
				tempArray[index++] = list.get(i);
			}
		}else{
			for(int i = index2; i <= end; i++){
				tempArray[index++] = list.get(i);
			}
		}
		
		//copy from tempArray to list[start,end]
		for(int i = 0; i < end - start + 1; i++){
			list.set(start + i, tempArray[i]);
		}
	}
	
	
	public List<Integer> getSortedList(){
		MergeSort(0, list.size() - 1);
		return list;
	}

	
	public static void main(String[] args){
		List<Integer> list = new ArrayList<Integer>();
		//produce raw data to a list
		System.out.println("Raw Input: ");
		for(int i = 0;i < 10;i++){
			Random random = new Random();
			Integer x = random.nextInt(100);
			System.out.print(x + " ");
 			list.add(x);
		}
		
		//intialize MergeSortAlgorithm class
		MergeSortAlgorithm mergeSortAlgorithm = new MergeSortAlgorithm(list);
		System.out.println("\nSorted Integer List Output: ");
		for(Integer i : mergeSortAlgorithm.getSortedList())
			System.out.print(i + ", ");
	}
}

输出:


你可能感兴趣的:(java,object,list,Integer,Random,merge)