插入排序算法&二路归并排序算法java实现
2012-04-17 19:56
134 查看
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package sortalgos; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * * @author hitachi */ //实现插入排序算法 class insertSort{ public static void Sort(ArrayList<Double> myArr){ if(myArr.size()==1||myArr==null) return; else{ int i,j; for(j=1;j<myArr.size();j++){ Double temp=myArr.get(j); i=j-1; while(temp.compareTo(myArr.get(i))<0){ myArr.set(i+1, myArr.get(i)); --i; if(i<0) break; } myArr.set(i+1, temp); } } } } class mergeSort{ public static void merge(ArrayList<Double> sub0, ArrayList<Double> sub1, ArrayList<Double> dest){ int i,j,k; if(sub0.size()+sub1.size()!=dest.size()){ System.out.println("Size doesn't match"); return; } i=0; j=0; k=0; while(true){ if(i<sub0.size()&&j<sub1.size()){ //两边都还有值的情况 if(sub0.get(i).compareTo(sub1.get(j))<0){ dest.set(k, sub0.get(i)); i++; k++; } else{ dest.set(k, sub1.get(j)); j++; k++; } } else if(i>=sub0.size()&&j<sub1.size()){ //仅单边有值情况1 dest.set(k, sub1.get(j)); j++; k++; } else if(i<sub0.size()&&j>=sub1.size()){ //仅单边有值情况2 dest.set(k, sub0.get(i)); i++; k++; } else break; } } public static void sort(ArrayList<Double> myArr){ if(myArr.size()==1) return; else{ List sub0=myArr.subList(0, myArr.size()/2); List sub1=myArr.subList(myArr.size()/2, myArr.size()); ArrayList<Double> subAL0=new ArrayList<Double>(sub0); ArrayList<Double> subAL1=new ArrayList<Double>(sub1); sort(subAL0); sort(subAL1); merge(subAL0,subAL1,myArr); } } } class arrayPrinter{ public static void print(ArrayList myArr){ for(Object single : myArr){ // System.out.println("The array by order now is:"); System.out.print(single); System.out.print(" "); } System.out.println(" "); } } public class SortAlgos { /** * @param args the command line arguments */ private static ArrayList<Double> myArr = new ArrayList<Double>(); public static void main(String[] args) throws IOException { BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); while(true){ myArr.clear(); System.out.println("Enter some double values one by one,end with a '.' or empty line:"); String readin=input.readLine(); while(!"".equals(readin) &&!".".equals(readin)){ Double tempD=new Double(readin); myArr.add(tempD); readin=input.readLine(); } System.out.println("Your input order is:"); arrayPrinter.print(myArr); //************************************************** 要用哪种排序算法自己取消注释,并注释掉其他选项 // insertSort.Sort(myArr); //插入排序 mergeSort.sort(myArr); //二路归并排序 //************************************************** System.out.println("After sorting, the order is:"); arrayPrinter.print(myArr); System.out.println("Would you like another round?(Y/N)"); readin=input.readLine(); if(!("Y".equals(readin)||"y".equals(readin))) break; } } }
相关文章推荐
- 排序算法之Java实现4——二路归并排序算法
- 必须知道的八大种排序算法【java实现】(三) 归并排序算法、堆排序算法详解
- [置顶] Node.js自动化测试及大规模性能测试技术实现(Java&Node.JS)
- JS&Java实现常见算法面试题
- 单例模式Singleton实现(C++&Java)
- 【Dubbo&&Zookeeper】4、 Java实现Dubbo服务提供者及消费者注册
- DES&&RSA的JAVA实现终于在一个星期后出炉!(DES类)
- Java Thread&Concurrency(16): 深入理解ArrayBlockingQueue及其实现原理
- 简单封装Jackson,实现JSON String<->Java Object的Mapper.
- Java Thread&Concurrency(13): 深入理解ConcurrentLinkedQueue及其实现原理
- 链表问题之无头单链表删节点<Java实现>
- java 登陆窗口的实现
- C#和Java实现互通的RSA&DES加解密算法(二)
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- java之旅 (四)隐藏实现 & 复用类
- Java 实现"我的电脑"资源管理器(JTree,JTable)
- Java连接MySQL数据库实现用户名密码的验证方法 Java语句中sql查询语句'' ""作用
- 实现二路归并排序算法
- 【算法系列】——Java实现冒泡&&快速
- UVAOJ 127-"Accordian " Patience | java实现