您的位置:首页 > 编程语言 > Java开发

Java实现归并排序

2012-09-10 18:54 435 查看
简述:

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 + ", ");
}
}


输出:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: