Вставка сортирует проблемную зону - PullRequest
0 голосов
/ 27 июня 2018
for(i = 1; i < len; i++){
    for(j = i - 1; j >= 0; --j){
        if(data[j] > data[1 + j]){
            swap(j, j + 1);
        } else {
            break;
        }
    }
}

метод swap выполняет обмен элементов. Почему это должно быть --j вместо j--? в чем разница ? в чем преимущество размещения j--?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Для типов примитивов нет разницы в производительности между постфиксом и приращением / уменьшением префикса.

Кстати, есть более эффективная реализация алгоритма сортировки вставок, только 1 присваивание во внутреннем цикле (swap выполняет 3).

int i, key, j;
for (i = 1; i < n; i++)
{
   key = arr[i];
   j = i-1;
   for (j = i-1; j >= 0 && arr[j] > key; --j) {
       arr[j+1] = arr[j];
   }
   arr[j+1] = key;
}
0 голосов
/ 27 июня 2018

В этом контексте оба работают.

В C ++ есть веские причины для использования ++ i. Поскольку вы пишете код на C, выберите один и придерживайтесь его.

...