归并排序

归并排序:就是把数组拆分,把拆分后的数组进行排序,然后在合并。图如下所示:


代码实现如下:

package guibing;

import java.util.Arrays;
 

public class MergeSortDemo {
	private int [] arr;
	public MergeSortDemo(int[] arr){
		this.arr=arr;
	}

	/**
	 * @param arr 要排序的数组
	 * @param low 排序数组的起始下标
	 * @param hight 排序数组的结束位置
	 * @return 返回排序后的数组*/
	
	public int[] sort(int[] arr,int low,int hight){
		int mid=(low+hight)/2;//取中间的位置
		if(low<hight){//如果小的小标比大的下标小,则说明数组还要拆分
			sort(arr,low,mid);//给左边的进行拆分,在排序
			sort(arr,mid+1,hight);//给右边的拆分,在排序
			mergeSort(arr,low,mid,hight);// 合并
		}
		
		return arr;
	}
	/**
	 * @param arr 要排序的数组
	 * @param low 合并的下界
	 * @param hight 合并的上届
	 * */
	private void mergeSort(int[] arr, int low, int mid, int hight) {
		
		int i=low;
		int j=mid+1;
		int index=0;
		//定义一个零时数组,
		int[] temp=new int[(hight-low+1)];、
		//给零时数组赋值
		while(i<=mid&&j<=hight){
			if (arr[i] < arr[j]) {  
				temp[index++] = arr[i++];  
			} else {  
				temp[index++] = arr[j++];  
			}  
				 
		}
		
		while(i<=mid){
			temp[index++]=arr[i++];
		}
		
		while(j<=hight){
			temp[index++]=arr[j++];
		}
		//吧零时数组的值赋给原数组
		for(int i1=0;i1<temp.length;i1++){
			arr[i1+low]=temp[i1];
		}
	}
	
	public static void main(String []a){
		int[] arr={123,5456,463,3478,858,9,2,88,34};
		MergeSortDemo m=new MergeSortDemo(arr);
		 arr=m.sort(arr, 0, arr.length-1);
		System.out.println(Arrays.toString(arr));
		
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值