前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法练习(5) - 归并排序

算法练习(5) - 归并排序

作者头像
惊羽-布壳儿
发布2022-06-15 16:02:58
1620
发布2022-06-15 16:02:58
举报
文章被收录于专栏:惊羽-布壳儿
代码语言:javascript
复制
package top.buukle.buukle._02MergeSort;

import org.junit.Test;

import java.util.Arrays;

public class MergeSort {

    @Test
    public void mergeSort_test() {
//        Integer[] A = {31,41,59,26,41,58};
        Integer[] A = {9,8,7,6,5,4,3,2,1};
        Integer leftIndex = 0 ;
        Integer rightIndex = A.length -1;
        int[] temp = new int[A.length];
        sort(A,leftIndex,rightIndex,temp);
        System.out.println(Arrays.asList(A));
    }

    private void sort(Integer[] a, Integer leftIndex, Integer rightIndex, int[] temp) {
	// 设置递归结束条件为 左右索引相逢时
	if(leftIndex < rightIndex){
		int middle = (leftIndex + rightIndex) / 2;
		sort(a,leftIndex,middle,temp);
		sort(a,middle + 1,rightIndex,temp);	
		merge(a,leftIndex,middle,rightIndex,temp);
	}

    }

    private void merge(Integer[] a, Integer leftIndex, Integer middle, Integer rightIndex, int[] temp) {
        int piLeft = leftIndex;
	int piRight = middle + 1;	
	int tIndex = 0;
    	// 将排序好的2个数组按顺序合并为1个数组,并写到temp临时数组中
	while(piLeft < middle + 1 && piRight < rightIndex + 1){
		if(a[piLeft] < a[piRight ] ){
			temp[tIndex++] = a[piLeft++];
		}else{
			temp[tIndex++] = a[piRight++];
		}
	}
	while(piLeft < middle + 1){
		temp[tIndex++] = a[piLeft++];
	}
	while(piRight < rightIndex + 1){
		temp[tIndex++] = a[piRight++];
	}
	// 将临时数组的值,拷贝到原数组相应的索引之中
	tIndex =0;
	int copyIndex = leftIndex;
	while(leftIndex < rightIndex + 1){
		a[copyIndex ++] = temp[tIndex ++];
	}
    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档