集册 Java实例教程 合并排序

合并排序

欢马劈雪     最近更新时间:2020-01-02 10:19:05

390
合并排序


//package com.nowjava;
/** 来自 nowjava.com - 时代Java**/

public class Main {

    public static void mergeSort(Number[] A, int start, int end) {

        if (end - start < 1)

            return;

        int split = ((end - start) / 2) + start;

        mergeSort(A, start, split);

        mergeSort(A, split + 1, end);

        merge(A, start, end, split);

    }


    public static void merge(Number[] A, int start, int end, int split) {

        Number[] L = new Number[(split + 1) - start];

        Number[] R = new Number[end - split];

        /*
         from 时 代      J a v a   公   众 号 - nowjava.com 
        */

        for (int i = 0; i < L.length; i++) {

            L[i] = A[start + i];

        }

        for (int i = 0; i < R.length; i++) {

            R[i] = A[split + 1 + i];

        }


        int ri = 0;

        int li = 0;


        for (int i = start; i <= end; i++) {


            if (L[li].floatValue() <= R[ri].floatValue()) {

                A[i] = L[li];

                li++;

            } else {

                A[i] = R[ri];

                ri++;

            }

            if (li == L.length) {

                while (ri < R.length) {

                    i++;

                    A[i] = R[ri];

                    ri++;

                }

   
展开阅读全文