Добрый день! При проверке алгоритмов на время выполнения, столкнулся со следующей ситуацией: Пузырьковый алгоритм, сортирующий массив со значениями расположенными в обратном порядке. Код:
public void sort2() { //сортировка.
    int in, outR, outL;
    long temp;
    long count=0;

    for (outR = nElem - 1; outR > 1; outR--) {
        for (in = 0; in < outR; in++)
            if (a[in] > a[in + 1]) {

                temp = a[in + 1];
                a[in + 1] = a[in];
                a[in] = temp;
                count++;
            }
    }
    System.out.println(count);
}
метод вставки:
public void insert(long value) { //вставка.
    a[nElem] = value;
    nElem++;
}
и сама вставка значений с последующей сортировкой:
for(int j=100000; j>0; j--) //вставка значений по убыванию.
    arr.insert(j);
arr.sort2();//сортировка.
работает в 2 с лишним раза быстрее, чем тот же алгоритм, но обрабатывающий массив устроенный случайным образом. Код вставки значений в неупорядоченный массив:
for(int j=0; j< maxSize; j++) {
    long n = (long) java.lang.Math.random()*(maxSize-1));
     arr.insert(n);
}
По логике, массив отсортированный в обратном порядке должен сортироваться в среднем в 2 раза медленнее чем массив отсортированный в обратном порядке. Что показывает статистика при сортировке массивов, со 100 000 элементов: Случайно отсортированный массив производит 2 510 792 393 операций в методе sort и выполняется за 16 с., а Отсортированный по убыванию с количеством операций 4 999 949 999 выполняется за 7с. Вопрос: с чем связано более короткое время обработки большего количества операций одним и тем же методом?