java二路归并排序算法,插入排序算法&二路归并排序算法java实现

/*

* 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;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值