排序之归并排序

package com.zhang.reflection.面试.排序;
public class 归并排序 {
    public static void merge(int[] arr,int low,int mid,int high) {
        int[] temp=new int[high-low+1];
        int i=low;  //左指针
        int j=mid+1;  //右指针
        int k=0;
        //先把小的数组全部移到新数组中去
        while(i<=mid&&j<=high) {
            if(arr[i]<arr[j]) {
                temp[k++]=arr[i++];
            }else {
                temp[k++]=arr[j++];
            }
        }
        //如果左边有剩余,全部移进去
        while(i<=mid) {
            temp[k++]=arr[i++];
        }
        //如果右边有剩余,全部移进去
        while(j<=high) {
            temp[k++]=arr[j++];
        }
        //用排好序的新数组覆盖排序前的数组
        for(int t=0;t<temp.length;t++) {
            arr[low+t]=temp[t];
        }
    }
    public static void mergeSort(int[] arr,int low,int high) {
        int mid=low+(high-low)/2;
        if(low<high) {
            //左边
            mergeSort(arr,low,mid);
            //右边
            mergeSort(arr,mid+1,high);
            //归并
            merge(arr,low,mid,high);
        }
    }
    public static void main(String[] args){
        int[] arr = {10,7,2,4,7,62,3,4,2,1,8,9,19};
        mergeSort(arr,0,12);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}
全部评论

相关推荐

04-17 10:16
门头沟学院 Java
小浪_coder:24届很难找了,马上25的都毕业了还有很多没找到的
点赞 评论 收藏
分享
真烦好烦真烦:牛友太有实力了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务