Java中的归并排序

话不说多,直接上代码

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.Buffer;

public class Test {
    int[] data= new int[100];
    int size=data.length;

    public void showData() {
        for(int i=0;i<size;i++) {
            System.out.print("[" + data[i] +"]");
        }
        System.out.println(" ");
    }

    public void input() {
        try {
            for(int i=0;i<size;i++) {
                InputStreamReader a = new InputStreamReader(System.in);
                BufferedReader b = new BufferedReader(a);
                data[i]= Integer.parseInt(b.readLine());
            }
        }catch(Exception e) {}
    }

    public static void Merger(int[] data,int fist,int last) {
        if(fist>=last) {
            return;
        }
        int mid=(last-fist)/2+fist;
        Merger(data, fist, mid);
        Merger(data, mid+1, last);

        mergerSort(data,fist,mid,last);
    }

    public static void mergerSort(int[] data,int fist,int mid,int last) {
        int[] temp=new int[last-fist+1];
        int i=fist;
        int j=mid+1;

        for(int z=0;z<temp.length;z++) {
            if(i<=mid &&(j>last || data[i]<=data[j])) {
                temp[z]=data[i++];
            }
            else if(j<=last &&(i>mid || data[j]<=data[i])) {
                temp[z]=data[j++];
            }
        }

        for(int z=0;z<temp.length;z++) {
            data[z+fist]=temp[z];
        }
    }


    public static void main(String[] args) {
        Test arr = new Test();


        System.out.print("size=:");
        try{
            InputStreamReader a = new InputStreamReader(System.in);
            BufferedReader br = new BufferedReader(a);
            arr.size = Integer.parseInt(br.readLine());
        }catch(Exception e){}

        System.out.println("input data:");
        arr.input();

        System.out.println("show data:");
        arr.showData();

        Merger(arr.data,0,arr.size-1);

        System.out.println("after Sort:");
        arr.showData();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值