Arrays 如何知道数组是否为;几乎是";分类?

Arrays 如何知道数组是否为;几乎是";分类?,arrays,algorithm,sorting,Arrays,Algorithm,Sorting,我必须决定,给定一个数字数组,堆排序或合并排序在排序时是否会更快,而无需实际运行它们。为了做到这一点,我试图找到在这两种情况下都可能损害性能的良好指标,例如数组的长度 我发现merge-sort非常擅长对几乎已排序的数组进行排序。从这个意义上说,我试图找到一种好方法来估计数组的“几乎”排序程度,但我不确定如何做到这一点 我曾考虑过使用减去数组中每个连续元素的结果的方法,但我不确定这是否是解决此问题的最佳方法。例如: public class AlmostSortedCalculator {

我必须决定,给定一个数字数组,堆排序或合并排序在排序时是否会更快,而无需实际运行它们。为了做到这一点,我试图找到在这两种情况下都可能损害性能的良好指标,例如数组的长度

我发现merge-sort非常擅长对几乎已排序的数组进行排序。从这个意义上说,我试图找到一种好方法来估计数组的“几乎”排序程度,但我不确定如何做到这一点

我曾考虑过使用减去数组中每个连续元素的结果的方法,但我不确定这是否是解决此问题的最佳方法。例如:

public class AlmostSortedCalculator {

    private static final int[] UNSORTED_ARRAY = {7, 1, 3, 9, 4, 8, 5};
    
    private static final int[] SORTED_ARRAY = {1, 3, 4, 5, 7, 8, 9};

    private static final int[] UNSORTED_ARRAY_ = {200, 20, 634, 9957, 1, 890, 555};    

    private static final int[] SORTED_ARRAY_ = {1, 20, 200, 555, 634, 890, 9957};
    
    public static void main(String[] args) {
        new AlmostSortedCalculator();
    }

    public AlmostSortedCalculator() {

        calculate(SORTED_ARRAY);
        
        calculate(UNSORTED_ARRAY);

        calculate(SORTED_ARRAY_);        

        calculate(UNSORTED_ARRAY_);
    }

    private void calculate(int[] array) {

        int result = 0;        

        for (int i = array.length - 1; i != 0; i--) {
            if (i != 0) {
                result += array[i] - array[i - 1];
            }
        }

        System.out.println("The result is: " + result / array.length);
    }
}
结果是:1

结果是:0

结果是:1422人

结果是:50


当数组排序时,平均值的结果似乎更高,但我不确定该指标的可靠性。我相信有更好的办法,但我想不出任何办法。有什么建议吗?

首先,我只看减法结果的符号:

/* returns the sign of the expression a - b */
int sign_of_subtraction_result(int a, int b) {
    if ( a < b ) return -1;
    if ( a > b ) return +1;
    return 0;
}
/*返回表达式a-b的符号*/
减法结果的整数符号(整数a,整数b){
如果(ab)返回+1;
返回0;
}
您也可以调用此函数
compare()

请注意,通常的库排序函数只使用此信息,并且需要这样的<代码> COMPARE()/<代码>函数。例如,在
{9,1,3,4,5,7,8}没有元素位于正确的位置,只有一个元素距离它的距离大于1。我们考虑(1,2,3,4)和(4,3,2,1)排序吗?对于大的数组,您可以随机选取100对索引(random.nextInt(arr.length))并计算其中有多少索引i