Я пишу 2 разных вида, один выбор другой вставка. Ниже приведен мой метод сортировки вставкиКак подсчитать сравнения в сортировке и сортировке?
public static void iSort(String[] array)
{
int i, j, k;
String temp;
for(i = 1; i<array.length; i++)
{
k=i;
for(j = k-1; j>=0 && array[j].compareTo(array[k])>0; j--)
{
ccounter++;
temp = array[j];
array[j] = array[k];
array[k] = temp;
k--;
}
}
}
где ccounter - это статическая переменная класса. Когда я тестирую это, используя массив строк из 1000 элементов, я получаю значение 239507. Однако, когда я тестирую с правильно упорядоченным массивом строк, я получаю нулевое значение, которое, как я знаю, неверно, так как наилучшая производительность n сравнений для n условий. Интересно, неправильно ли написан мой метод или если счетчик помещен неправильно
вы подсчетом свопов, а не сравнение. (т. е. вы не считаете сравнение, результатом которого является '<= 0') – njzk2
Во внутреннем цикле for перемещайте сравнение внутри цикла for. В настоящее время вы считаете, только когда вам нужно поменять местами. Если сравнение выполняется внутри цикла, вы будете считать все сделанные сравнения. – arunmoezhi
@arunmoezhi. Это означает, что вы принимаете условие из круглых скобок и помещаете их в фактическое тело цикла? – rubikscube09