首页 > 代码库 > 【算法设计与分析基础】13、合并排序
【算法设计与分析基础】13、合并排序
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 = http://www.mamicode.com/Arrays.asList(8,3,2,9,7,1,5,4);" "); } } }
结果:
【算法设计与分析基础】13、合并排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。