排序算法---归并排序 (java)

本文详细介绍了归并排序的实现原理及过程。通过递归将数组分解为子序列,并逐一排序,最终合并为有序数组。提供了具体的Java代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

归并排序,顾名思义,就是将数据进行合并,我们首先将待排数组分成两个子序列,然后在对其单个序列进行排序,不断递归到只有两个元素的子序列,然后再向上返回,最中得到的是两个有序的子序列,最后我们通过一个辅助数组,遍历这两个数组,挑选出较小的元素将其放在辅助数组中,这样我们就会在辅助数组中将数排好序了,然后我们再将辅助数组中的数据复制到原数组中即可。

代码实例:

  public void sort (int []a,int left,int right) {
	if(left<right){
//将传入的数组找出其中间位置,然后对两部分进行递归
	    int center = (left+right)/2;
	    sort (a,left,center);
	    sort (a,center+1,right);
	    merge(a,left,center,right);
	}
	
    }
//定义了一个辅助数组,首先将传入的起始位置记录下来然后对两部分进行比较,将较小的存在一个数组中,依次存取,哪一部分取的值比较小,哪一个部分数组就开始向前进位,
//最后将剩余的数复制放在辅助数组中,最后将我们当前数组排序后的依次插入到原数组中。
    public void merge(int []a,int left,int center,int right){
	int b [] = new int [a.length];
	int mid = center+1;
	int third = left;
	int tmp = left;
	while (left<= center && mid <= right){
	    if(a[left]<= a[mid]){
		b[third++] = a[left++];
	    }
	    else {
		a[third++] = a[mid++];
	    }
	}
	while (mid <= right){
	    b[third++] = a[mid++];
	}
	while (left<=center){
	    b[third++] = a[left++];
	}
	while (tmp <= right){
	    a[tmp] = b[tmp++];
	}
	
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值