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

CS61B学习笔记——归并排序

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

CS61B学习笔记——归并排序

归并排序算法思路

如果数组长度为1,return将数组对半分,对两部分分别进行归并排序将上一步中归并排序后的数组合并起来

算法实现
    java

public class MergeSort {

    
    public int[] MergeSort(int[] a) {
        int size = a.length;
        if (size <= 1) {
            return a;
        } else {
            int halfSize = size / 2;
            int[] x = new int[halfSize];
            int[] y = new int[size - halfSize];
            System.arraycopy(a, 0, x, 0, halfSize);
            System.arraycopy(a, halfSize, y, 0, size-halfSize);
            int[] xSorted = MergeSort(x);
            int[] ySorted = MergeSort(y);
            return merge(xSorted, ySorted);
        }
    }

    
    private int[] merge(int[] x, int[] y) {
        if (x.length == 0) {
            return y;
        } else if (y.length == 0) {
            return x;
        } else {
            if (mergeCompare(x, y)) {
                return mergeHelper(x, y);
            } else {
                return mergeHelper(y, x);
            }
        }
    }

    
    private boolean mergeCompare(int[] x, int[] y) {
        return x[0] < y[0];
    }

    private int[] mergeHelper(int[] x, int[] y) {
        int[] res = new int[x.length + y.length];
        res[0] = x[0];
        int[] xNew = new int[x.length - 1];
        System.arraycopy(x, 1, xNew, 0, x.length - 1);
        int[] nums = merge(xNew, y);
        System.arraycopy(nums, 0, res, 1, x.length + y.length - 1);
        return res;
    }

    
    public static void main(String[] args) {
        MergeSort test = new MergeSort();
        int[] a = new int[]{1, -3, 6, 9, 22, -4, 3};
        int[] b = test.MergeSort(a);
        for (int i = 0; i < b.length; i++) {
            System.out.println(b[i]);
        }
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770324.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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