归并排序代码及简要说明

import java.util.Arrays;
public class Merge {
public static void main(String[] args) {
	int arr[]=new int[]{9,5,3,7,2,1,6,4,8};
	merge(arr,0,arr.length-1);
	System.out.println(Arrays.toString(arr));
}
//递归函数 传入数组,数组左边,数组右边
public static void merge(int arr[],int left,int right) {
//当数组左==数组右时,成为递归出口,返回。    
	if(left==right) {
		return;
	}
    //定义中间mid
	int mid=(left+right)/2;
    //递归左边
	merge(arr,left,mid);
    //递归右边
	merge(arr,mid+1,right);
    //调用函数sort进行排序
	sort(arr,left,right,mid);		
}

public static void sort(int arr[],int left,int right,int mid) {
    //创建当前递归的数组temp,用来存临时数据
	int[] temp=new int[right-left+1];
    //temp数组的坐标
	int index=0;
    //s1为左边数组的坐标
	int s1=left;
    //s2为右边数组的坐标
	int s2=mid+1;
    //如果s1和s2都小于自己的边界,代表两个临时数组还能够比较
	while(s1<=mid&&s2<=right) {
        //如果s1的值更小,让s1处加入临时数组
		if(arr[s1]<arr[s2]) {
			temp[index]=arr[s1];
            //临时数组下标+1;s1游标+1
			index++;
			s1++;
        //如果s2的值更小,让s2处加入临时数组
		}else {
			temp[index]=arr[s2];
            //临时数组下标+1;s2游标+1
			index++;
			s2++;
		}				
	}
    //如果s1的值小于mid,左边游标未遍历完,需要将剩下的数据存入temp临时数组
	while(s1<=mid) {
		temp[index]=arr[s1];
		index++;
		s1++;
	}
	//如果s2的值小于right,左边游标未遍历完,需要将剩下的数据存入temp临时数组
	while(s2<=right){
		temp[index]=arr[s2];
		index++;
		s2++;
	}
	//遍历临时数组,将临时数组排好顺序的值放回arr数组	
	for(int i=0;i<temp.length;i++) {
	//考虑到递归时两边数组的left不一样
		arr[i+left]=temp[i];
	}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值