java的归并排序_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 list = new ArrayList();

public MergeSortAlgorithm(List 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 getSortedList(){

MergeSort(0, list.size() - 1);

return list;

}

public static void main(String[] args){

List list = new ArrayList();

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

}

}

输出:

0818b9ca8b590ca3270a3433284dd417.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值