Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;
/**
 * Java Modular Image Synthesis Toolkit (JMIST)
 * Copyright (C) 2008-2013 Bradley W. Kimmel
 *
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use,
 * copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following
 * conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 */

import java.util.List;

public class Main {
    /**
     * Auxilliary method required for merging two consecutive sorted lists in
     * place.
     *
     * <p>This implementation is based on:</p>
     *
     * <p>J. Chen, "<a href="http://dx.doi.org/10.1016/j.ipl.2005.11.018">A
     * simple algorithm for in-place merging</a>", Information Processing
     * Letters 98:34-40, 2006.</p>.
     *
     * This method is a direct transcription of Fig. 4.
     */
    private static <T extends Comparable<? super T>> int findNextXBlock(List<T> A, int x0, int z, int y, int k,
            int f, int b1, int b2) {
        T min1 = null, min2 = null;
        int m = (int) Math.floor(((z - x0 - f) / (double) k)) * k + f + x0;
        if (m <= z) {
            m += k;
        }
        int i = m;
        int j, x = i;
        while ((i + k) <= y) {
            if ((i != b1) && (i != b2)) {
                if ((i < b1) && (b1 < i + k)) {
                    j = m - 1;
                } else {
                    j = i + k - 1;
                }
                if (min1 == null || (A.get(i).compareTo(min1) <= 0 && A.get(j).compareTo(min2) <= 0)) {
                    x = i;
                    min1 = A.get(i);
                    min2 = A.get(j);
                }
            }
            i += k;
        }
        return x;
    }
}