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();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
归并排序是一种常见的排序算法,它采用分治的思想,将一个大问题分解为多个小问题进行解决,最后将结果合并得到最终的排序结果。下面是Java使用归并排序的示例代码: ```java public class MergeSort { public static void mergeSort(int[] arr) { if (arr == null || arr.length <= 1) { return; } int[] temp = new int[arr.length]; mergeSort(arr, 0, arr.length - 1, temp); } private static void mergeSort(int[] arr, int left, int right, int[] temp) { if (left < right) { int mid = (left + right) / 2; mergeSort(arr, left, mid, temp); // 对左半部分进行归并排序 mergeSort(arr, mid + 1, right, temp); // 对右半部分进行归并排序 merge(arr, left, mid, right, temp); // 合并左右两部分 } } private static void merge(int[] arr, int left, int mid, int right, int[] temp) { int i = left; // 左序列指针 int j = mid + 1; // 右序列指针 int t = 0; // 临时数组指针 while (i <= mid && j <= right) { if (arr[i] <= arr[j]) { temp[t++] = arr[i++]; } else { temp[t++] = arr[j++]; } } while (i <= mid) { // 将左边剩余元素填充进temp temp[t++] = arr[i++]; } while (j <= right) { // 将右序列剩余元素填充进temp temp[t++] = arr[j++]; } t = 0; // 将temp的元素全部拷贝到原数组 while (left <= right) { arr[left++] = temp[t++]; } } } ``` 使用归并排序时,可以调用`mergeSort`方法传入待排序的数组即可完成排序。在`mergeSort`方法,首先判断数组是否为空或长度小于等于1,如果是,则直接返回。然后创建一个临时数组`temp`,并调用`mergeSort`方法进行递归排序。在递归排序的过程,将数组分为左右两部分,分别对左右两部分进行归并排序,最后调用`merge`方法将左右两部分合并起来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值