Используя этот сегмент кода, который у меня уже есть, я хочу изменить метод selectionSort, чтобы иметь два счетчика: один для количества сравнений, а другой - для количества обменов данными. Каждый раз, когда сравниваются два элемента данных (независимо от того, находятся ли элементы в правильном порядке - мы заинтересованы в том, чтобы сравнение вообще проводилось), увеличивайте счетчик сравнения. Каждый раз, когда фактически меняются местами два элемента данных, увеличивайте счетчик обмена данными.
До сих пор это то, что я пытался добавить счетчики. Однако я получаю сообщение об ошибке «Неразрешенная проблема компиляции: счетчик не может быть преобразован в переменную».
public static void selectionSort(double[] list) {
for (int i = 0; i < list.length - 1; i++) {
// Find the minimum in the list[i..list.length-1]
double currentMin = list[i];
int currentMinIndex = i;
int counter = 0;
for (int j = i + 1; j < list.length; j++) {
if (currentMin > list[j]) {
currentMin = list[j];
currentMinIndex = j;
}
}
// Swap list[i] with list[currentMinIndex] if necessary;
if (currentMinIndex != i) {
list[currentMinIndex] = list[i];
list[i] = currentMin;
}
counter += 1;
}
System.out.println("The size of the sorted array is " + list.length + " and the count is " + counter);
}
У меня есть основной метод, описанный ниже.
public static void main(String[] args) {
final int NUM_ELEMENTS = 10;
double[] lo2Hi = new double[NUM_ELEMENTS];
for (int i = 0; i < NUM_ELEMENTS; i++) {
lo2Hi[i] = i + 1;
}
selectionSort(lo2Hi);
double[] hi2Lo = new double[NUM_ELEMENTS];
for (int i = 0; i < NUM_ELEMENTS; i++) {
hi2Lo[i] = 10 - i;
}
selectionSort(hi2Lo);
double[] random = new double[NUM_ELEMENTS];
for (int i = 0; i < random.length; i++) {
random[i] = Math.random();
}
selectionSort(random);
}