用于检查已排序的标准功能

时间:2014-10-23 13:21:17

标签: java

我在Java中有一个Double[] foo

是否有一个库函数告诉我这个数组是否已排序?我知道我可以构建这样的函数,但如果库函数可用,这不是一件好事。 java.util.Arrays中没有任何内容,java.util.Collections中似乎没有任何内容。

(在C ++中我们有std::is_sorted并且假设Java库比C ++ 11更大,我想我可以使用它。

2 个答案:

答案 0 :(得分:1)

据我所知,没有这样的功能。

值得注意的是,它实际上可能不需要更多时间来排序,而不是确定它是否已分类。

您始终可以将其包装在为您维护sorted标记的对象中。

您可以使用以下方式自行实现此功能:

/**
 * Bridge function to the isSorted(Iterable<Comparable>) below
 * allowing arrays to tested too.
 * 
 * @param <T> - The elements in the array.
 * @param a - The array.
 * @return - true if the Array is sorted - false otherwise.
 */
public static <T extends Comparable<T>> boolean isSorted(T[] a) {
    return isSorted(Arrays.asList(a));
}

/**
 * Checks sortedness of any Iterable of Comparables.
 * 
 * @param <I> - The type of the Iterable.
 * @param <T> - The type of the Comparable.
 * @param a - The Iterable<Comparable> to test.
 * @return - true if the Iterable is sorted - false otherwise.
 */
public static <T extends Comparable<T>> boolean isSorted(Iterable<T> a) {
    // Remember the previous element.
    T prev = null;
    for (T it : a) {
        if (prev != null && it.compareTo(prev) < 0) {
            // This should be before prev! Not sorted!!
            return false;
        }
        prev = it;
    }
    // All in order.
    return true;
}

答案 1 :(得分:0)

似乎没有标准功能。使用此:

private static <T extends Double/*Can't extend Number for some reason ;-)*/>
boolean isSorted(T[] x)
{
    if (x != null){
        for (int n = 1; n < x.length; ++n){
            if (x[n - 1] >= x[n]){
                return false;
            }
         }
    }
    return true;            
}