/*
* 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 myArr){
if(myArr.size()==1||myArr==null)
return;
else{
int i,j;
for(j=1;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 sub0, ArrayList sub1, ArrayList 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
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
dest.set(k, sub1.get(j));
j++;
k++;
}
else if(i=sub1.size()){ //仅单边有值情况2
dest.set(k, sub0.get(i));
i++;
k++;
}
else
break;
}
}
public static void sort(ArrayList 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 subAL0=new ArrayList(sub0);
ArrayList subAL1=new ArrayList(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 myArr = new ArrayList();
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;
}
}
}