zoukankan      html  css  js  c++  java
  • 【算法设计与分析基础】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 = 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 + " ");
    		}
    	}
    }
    

      

    结果:

  • 相关阅读:
    GitHub Interesting Collection
    使用 CSS3 Flexible Boxes 布局
    消失的属性
    浅谈 JavaScript 模块化编程
    为你的 Javascript 加点咖喱
    软件测试
    osi七层模型
    3_Hydra(爆破神器)
    2_NC(瑞士军刀)
    1_HTTP协议详解
  • 原文地址:https://www.cnblogs.com/cutter-point/p/6947448.html
Copyright © 2011-2022 走看看