⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sort.java

📁 OSGI这是一个中间件,与UPNP齐名,是用于移植到嵌入式平台之上
💻 JAVA
字号:
/* * Copyright (c) 2003, KNOPFLERFISH project * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following * conditions are met: * * - Redistributions of source code must retain the above copyright *   notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above *   copyright notice, this list of conditions and the following *   disclaimer in the documentation and/or other materials *   provided with the distribution. * * - Neither the name of the KNOPFLERFISH project nor the names of its *   contributors may be used to endorse or promote products derived *   from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */package org.knopflerfish.util.sort;import java.io.File;public class Sort {    /** No public default constructor in this class. */    private Sort() throws Exception {        throw new Exception("The Sort class is not instanciable.");    }    /**     * Sorts the specified array of Integer objects into ascending order,     * according to the natural ordering of its elements.     *      * The sorting algorithm is mergesort. This algorithm offers n*log(n)     * performance.     *      * @param a     *            The array to be sorted.     */    public static void sortIntegerArray(Integer[] a) {        sortIntegerArray(a, 0, a.length);    }    /**     * Sorts the specified range of the specified array of Integer objects into     * ascending order, according to the natural ordering of its elements. The     * range to be sorted extends from index fromIndex, inclusive, to index     * toIndex, exclusive.     *      * The sorting algorithm is mergesort. This algorithm offers n*log(n)     * performance.     *      * @param a     *            The array to be sorted.     * @param fromIndex     *            The index of the first element (inclusive) to be sorted.     * @param toIndex     *            The index of the last element (exclusive) to be sorted.     */    public static void sortIntegerArray(Integer[] a, int fromIndex, int toIndex) {        int middle;        if (a == null)            return;        if (fromIndex + 1 < toIndex) {            middle = (fromIndex + toIndex) / 2;            sortIntegerArray(a, fromIndex, middle);            sortIntegerArray(a, middle, toIndex);            mergeIntegerArray(a, fromIndex, toIndex);        }    }    /**     * Implementation of the merge-part of the mergesort algorithm for Integer     * objects.     *      * @param a     *            The array to be merged.     * @param fromIndex     *            The index of the first element (inclusive) to be merged.     * @param toIndex     *            The index of the last element (exclusive) to be merged.     */    private static void mergeIntegerArray(Integer[] a, int fromIndex,            int toIndex) {        int i, j, k, middle, n;        n = toIndex - fromIndex;        Integer[] b = new Integer[n]; // temporary array        k = 0;        middle = (fromIndex + toIndex) / 2;        // Copy lower half to array b        for (i = fromIndex; i < middle; i++)            b[k++] = a[i];        // Copy upper half to array b in opposite order        for (j = toIndex - 1; j >= middle; j--)            b[k++] = a[j];        i = 0;        j = n - 1;        k = fromIndex;        // Copy back next-greatest element at each time        // until i and j cross        while (i <= j) {            if (b[i].intValue() <= b[j].intValue())                a[k++] = b[i++];            else                a[k++] = b[j--];        }    }    /**     * Sorts the specified array of String objects into ascending order,     * according to the natural ordering of its elements.     *      * The sorting algorithm is mergesort. This algorithm offers n*log(n)     * performance.     *      * @param a     *            The array to be sorted.     */    public static void sortStringArray(String[] a) {        sortStringArray(a, 0, a.length);    }    /**     * Sorts the specified range of the specified array of String objects into     * ascending order, according to the natural ordering of its elements. The     * range to be sorted extends from index fromIndex, inclusive, to index     * toIndex, exclusive.     *      * The sorting algorithm is mergesort. This algorithm offers n*log(n)     * performance.     *      * @param a     *            The array to be sorted.     * @param fromIndex     *            The index of the first element (inclusive) to be sorted.     * @param toIndex     *            The index of the last element (exclusive) to be sorted.     */    public static void sortStringArray(String[] a, int fromIndex, int toIndex) {        int middle;        if (a == null)            return;        if (fromIndex + 1 < toIndex) {            middle = (fromIndex + toIndex) / 2;            sortStringArray(a, fromIndex, middle);            sortStringArray(a, middle, toIndex);            mergeStringArray(a, fromIndex, toIndex);        }    }    /**     * Implementation of the merge-part of the mergesort algorithm for String     * objects.     *      * @param a     *            The array to be merged.     * @param fromIndex     *            The index of the first element (inclusive) to be merged.     * @param toIndex     *            The index of the last element (exclusive) to be merged.     */    private static void mergeStringArray(String[] a, int fromIndex, int toIndex) {        int i, j, k, middle, n;        n = toIndex - fromIndex;        String[] b = new String[n]; // temporary array        k = 0;        middle = (fromIndex + toIndex) / 2;        // Copy lower half to array b        for (i = fromIndex; i < middle; i++)            b[k++] = a[i];        // Copy upper half to array b in oppsite order        for (j = toIndex - 1; j >= middle; j--)            b[k++] = a[j];        i = 0;        j = n - 1;        k = fromIndex;        // Copy back next-greatest element at each time        // until i and j cross        while (i <= j) {            if (b[i].compareTo(b[j]) < 0)                a[k++] = b[i++];            else                a[k++] = b[j--];        }    }    /**     * Sorts the specified array of File objects into ascending order, according     * to the natural ordering of its elements.     *      * The sorting algorithm is mergesort. This algorithm offers n*log(n)     * performance.     *      * @param a     *            The array to be sorted.     */    public static void sortFileArray(File[] a) {        sortFileArray(a, 0, a.length);    }    /**     * Sorts the specified range of the specified array of File objects into     * ascending order, according to the natural ordering of its elements. The     * range to be sorted extends from index fromIndex, inclusive, to index     * toIndex, exclusive.     *      * The sorting algorithm is mergesort. This algorithm offers n*log(n)     * performance.     *      * @param a     *            The array to be sorted.     * @param fromIndex     *            The index of the first element (inclusive) to be sorted.     * @param toIndex     *            The index of the last element (exclusive) to be sorted.     */    public static void sortFileArray(File[] a, int fromIndex, int toIndex) {        int middle;        if (a == null)            return;        if (fromIndex + 1 < toIndex) {            middle = (fromIndex + toIndex) / 2;            sortFileArray(a, fromIndex, middle);            sortFileArray(a, middle, toIndex);            mergeFileArray(a, fromIndex, toIndex);        }    }    /**     * Implementation of the merge-part of the mergesort algorithm for File     * objects.     *      * @param a     *            The array to be merged.     * @param fromIndex     *            The index of the first element (inclusive) to be merged.     * @param toIndex     *            The index of the last element (exclusive) to be merged.     */    private static void mergeFileArray(File[] a, int fromIndex, int toIndex) {        int i, j, k, middle, n;        n = toIndex - fromIndex;        File[] b = new File[n]; // temporary array        k = 0;        middle = (fromIndex + toIndex) / 2;        // Copy lower half to array b        for (i = fromIndex; i < middle; i++)            b[k++] = a[i];        // Copy upper half to array b in oppsite order        for (j = toIndex - 1; j >= middle; j--)            b[k++] = a[j];        i = 0;        j = n - 1;        k = fromIndex;        // Copy back next-greatest element at each time        // until i and j cross        while (i <= j) {            if (b[i].getName().compareTo(b[j].getName()) < 0)                a[k++] = b[i++];            else                a[k++] = b[j--];        }    }    /**     * Sorts the specified array of Float objects into ascending order,     * according to the natural ordering of its elements.     *      * The sorting algorithm is mergesort. This algorithm offers n*log(n)     * performance.     *      * @param a     *            The array to be sorted.     */    public static void sortFloatArray(Float[] a) {        sortFloatArray(a, 0, a.length);    }    /**     * Sorts the specified range of the specified array of Float objects into     * ascending order, according to the natural ordering of its elements. The     * range to be sorted extends from index fromIndex, inclusive, to index     * toIndex, exclusive.     *      * The sorting algorithm is mergesort. This algorithm offers n*log(n)     * performance.     *      * @param a     *            The array to be sorted.     * @param fromIndex     *            The index of the first element (inclusive) to be sorted.     * @param toIndex     *            The index of the last element (exclusive) to be sorted.     */    public static void sortFloatArray(Float[] a, int fromIndex, int toIndex) {        int middle;        if (a == null)            return;        if (fromIndex + 1 < toIndex) {            middle = (fromIndex + toIndex) / 2;            sortFloatArray(a, fromIndex, middle);            sortFloatArray(a, middle, toIndex);            mergeFloatArray(a, fromIndex, toIndex);        }    }    /**     * Implementation of the merge-part of the mergesort algorithm for Float     * objects.     *      * @param a     *            The array to be merged.     * @param fromIndex     *            The index of the first element (inclusive) to be merged.     * @param toIndex     *            The index of the last element (exclusive) to be merged.     */    private static void mergeFloatArray(Float[] a, int fromIndex, int toIndex) {        int i, j, k, middle, n;        n = toIndex - fromIndex;        Float[] b = new Float[n]; // temporary array        k = 0;        middle = (fromIndex + toIndex) / 2;        // Copy lower half to array b        for (i = fromIndex; i < middle; i++)            b[k++] = a[i];        // Copy upper half to array b in opposite order        for (j = toIndex - 1; j >= middle; j--)            b[k++] = a[j];        i = 0;        j = n - 1;        k = fromIndex;        // Copy back next-greatest element at each time        // until i and j cross        while (i <= j) {            if (b[i].floatValue() <= b[j].floatValue())                a[k++] = b[i++];            else                a[k++] = b[j--];        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -