栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java归并排序

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java归并排序

java归并排序
package com.lmz;


public class OrderByMerging {
    public static void main(String[] args) {
        int arr[]= {8,4,5,7,1,3,6,2};

        //假设已经到最后一步
        int arrys[]= {4 ,5 ,7 ,8,1 ,2, 3, 6};
        int[] add=new int[8];
        //第一个参数表示传入数组{4 ,5 ,7 ,8,1 ,2, 3, 6}
        //第二个参数表示这个数组的第一个位置 即是0
        //第三个参数表示这个数组的中间位置  (0+7)/2=3
        //第四个参数 存放临时数组的
        mergeSort(arr,0,7,add);
        for(int i = 0 ; i < arrys.length ; i++) {
			System.out.print(arr[i]+" ");
		}


    }

    public static void mergeSort(int[] arr,int left,int right,int[] temp) {
        int mid = (left + right) / 2;
        if (left < right) {
            mergeSort(arr , left , mid , temp);
            mergeSort(arr , mid , right , temp);
            merge(arr , left , mid , right , temp);
        }
    }

    
    public static void merge(int[] arr , int left , int mid , int right , int[] temps) {
        //设置双指针,分别对应两个部分的数组下标
        int i = left ;
        int j = mid + 1 ;
        //对应temps的下班
        int temp = 0 ;
        
        while (i <= mid && j <= right) {
            if (arr[i] < arr[j]) {
                temps[temp++] = arr[i++] ;
            }else {
                temps[temp++] = arr[j++] ;
            }
        }
        while (i <= mid) {
            temps[temp++] = arr[i++] ;
        }
        while (j <= right) {
            temps[temp++] = arr[j++] ;
        }

        for (int x = 0 ; x <= right ; x++) {
            arr[x] = temps[x];
        }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1028101.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号