标签:print ima 遍历 copy com get 第一个 lis data
package cn.xf.algorithm.ch04;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
public class MergeSort {
public void mSort(List<Integer> data) {
if(data.size() <= 1) {
return;
}
//拷贝两边的数据
List copyA = new ArrayList();
List copyB = new ArrayList();
for(int i = 0; i < data.size() / 2; ++i) {
copyA.add(data.get(i));
}
for(int j = data.size() / 2; j < data.size(); ++j) {
copyB.add(data.get(j));
}
//递归排序子集
mSort(copyA);
mSort(copyB);
//排序结束之后,放回data中
Merge(copyA, copyB, data);
}
/**
* 合并两个子集
* @param dataA
* @param dataB
* @param data
*/
public void Merge(List<Integer> dataA, List<Integer> dataB, List data) {
//分别遍历A,B,DATA
int i = 0, j = 0, k = 0;
while(i < dataA.size() && j < dataB.size()) {
//遍历两边数据
if(dataA.get(i) <= dataB.get(j)) {
//吧A放进去
data.set(k, dataA.get(i++));
} else {
data.set(k, dataB.get(j++));
}
k += 1;
}
if(i >= dataA.size()) {
//如果第一个到最后了,那么把B后面的拷贝进去
for(; j < dataB.size(); ++j) {
data.set(k++, dataB.get(j));
}
} else {
for(; i < dataA.size(); ++i) {
data.set(k++, dataA.get(i));
}
}
}
@Test
public void test1() {
List<Integer> data = Arrays.asList(8,3,2,9,7,1,5,4);
//进行排序
MergeSort ms = new MergeSort();
ms.mSort(data);
for(int i : data) {
System.out.print(i + " ");
}
}
}
结果:

标签:print ima 遍历 copy com get 第一个 lis data
原文地址:http://www.cnblogs.com/cutter-point/p/6947448.html