日撸java_day49

该代码示例展示了如何使用递归实现归并排序。通过`mergeSortRecursive`方法进行递归分割,然后用`merge`方法合并已排序的子数组,最终对一个无序的DataArray(包含键值和内容)进行排序。
摘要由CSDN通过智能技术生成

第 49 天: 归并排序

    /**
     * Merge sort recursive.
     *
     * @param paraStart The start index.
     * @param paraEnd   The end index.
     */
    private void mergeSortRecursive(int paraStart, int paraEnd) {
        if (paraStart < paraEnd) {
            mergeSortRecursive(paraStart, (paraStart + paraEnd) / 2);
            mergeSortRecursive((paraStart + paraEnd) / 2 + 1, paraEnd);
            merge(paraStart, (paraStart + paraEnd) / 2, paraEnd);
            System.out.println(this);
        }// Of if
    }// Of mergeSortRecursive

    private void merge(int paraLeft, int paraRight, int paraRightEnd) {
        DataNode[] tempDataArray = new DataNode[paraRightEnd - paraLeft + 1];
        int tempDataArrayIndex = 0, tempLeftIndex = paraLeft, tempRightIndex = paraRight + 1;

        // Compare and copy.
        while (tempLeftIndex <= paraRight && tempRightIndex <= paraRightEnd) {
            if (data[tempLeftIndex].key < data[tempRightIndex].key) {
                tempDataArray[tempDataArrayIndex++] = data[tempLeftIndex++];
            } else {
                tempDataArray[tempDataArrayIndex++] = data[tempRightIndex++];
            }// Of if
        }// Of while

        // Copy to rest data.
        while (tempLeftIndex <= paraRight) {
            tempDataArray[tempDataArrayIndex++] = data[tempLeftIndex++];
        }// Of while
        while (tempRightIndex <= paraRightEnd) {
            tempDataArray[tempDataArrayIndex++] = data[tempRightIndex++];
        }// Of while

        System.arraycopy(tempDataArray, 0, data, paraLeft, tempDataArray.length);
    }// Of merge

    /**
     * Merge sort.
     */
    public void mergeSort() {
        mergeSortRecursive(0, length - 1);
    }// Of mergeSort

    /**
     * Test unit.
     */
    public static void mergeSortTest() {
        int[] tempUnsortedKeys = {5, 3, 6, 10, 7, 1, 9};
        String[] tempContents = {"if", "then", "else", "switch", "case", "for", "while"};
        DataArray tempDataArray = new DataArray(tempUnsortedKeys, tempContents);

        System.out.println(tempDataArray);

        tempDataArray.mergeSort();
        System.out.println(tempDataArray);
    }// Of mergeSortTest

 比较菜,只会写个递归算法,老师那个看着有点头大,回头再研究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值