2016-11-27 4 views
0

У меня возникли проблемы с попыткой выяснить, сколько свопов и сравнений для массива int с помощью сортировки в Java. Я смущен тем, где в циклах происходит обмен и сравнение. Любое руководство будет высоко оценено.Неисправность в создании сортировки и сортировки подсчета сортировщика

public class IntSelectionSorter { 

public static int count = 0; 
public static int count2 = 0; 

public static void selectionSort(int[] array) 
{ 
    int startScan; 
    int index; 
    int minIndex; 
    int minValue; 

    for (startScan = 0; startScan < (array.length - 1); startScan++) 
    { 
     minIndex = startScan; 
     minValue = array[startScan]; 

     for (index = startScan + 1; index < array.length; index++) 
     { 
      count2++; 
      if (array[index] < minValue) 
      { 
       minValue = array[index]; 
       count++; 
       minIndex = index; 
      } 
     } 
     array[minIndex] = array[startScan]; 
     count++; 
     array[startScan] = minValue; 
     count++; 
    } 
} 

}

+0

Какова конкретная проблема? Что вы ожидаете от этого, и что он делает? –

+0

Я создаю Сортировщик выбора для массива int, который, как предполагается, подсчитывает количество свопов и сравнений. Я уже создал Bubble Sorter для использования того же массива int. Я не уверен, что использовал swap (count) и сравнение (count2) в соответствующих местах этого Сортировщика. Я получаю ответ от 48 свопов и 300 сравнений. Если я изменю, где я поставлю «count» и «count2», я получаю разные ответы. Я могу опубликовать и другие файлы. – Nosuchluck

ответ

0

count2 кажется правильным. Количество должно быть изменено следующим образом:

for (startScan = 0; startScan < (array.length - 1); startScan++) 
{ 
    minIndex = startScan; 
    minValue = array[startScan]; 

    for (index = startScan + 1; index < array.length; index++) 
    { 
     count2++; 
     if (array[index] < minValue) 
     { 
      minValue = array[index]; 
      // count++; delete this 
      minIndex = index; 
     } 
    } 
    if (minIndex != startScan) { 
     array[minIndex] = array[startScan]; 
     count++; 
     array[startScan] = minValue; 
    } 
} 

в основном, счетчик приращения только тогда, когда есть необходимость поменять местами, то есть, когда есть другое число в массиве после startScan, который меньше, чем значение в startScan.

+0

Большое вам спасибо за помощь! Это имеет больше смысла. Однако я получаю число 0 свопов и 300 сравнений. Это не кажется правильным. – Nosuchluck

+0

Я проверил тест на это, и он дал правильный ответ. Проверен на входной массив [2,1,4,3], и он действительно дает 2 свопа (сначала для индекса 0, а второй для индекса 2). какой вклад вы пытаетесь сделать? –

0

общественного класса SortingTest {

public static void main(String[] args) 
{ 
    int[] values = { 1,53,86,21,49,32,90,65,33,11,34,68,54,32,78,80,35,22,96,59,265,44324,123,3123,25435}; 

    System.out.println("Original Order: "); 
    for (int element : values) 
     System.out.print(element + " "); 

    IntBubbleSorter.bubbleSort(values); 

    System.out.println("\nSorted order: "); 
    for (int element : values) 
     System.out.print(element + " "); 

    System.out.println(); 

    System.out.print("\n Bubble Sort Swaps:" + IntBubbleSorter.count); 
    System.out.print("\n Bubble Sort Comparisons:" + IntBubbleSorter.count2); 

    System.out.println(); 

    System.out.println("\nOriginal Order: "); 
    for (int element : values) 
     System.out.print(element + " "); 

    IntSelectionSorter.selectionSort(values); 

    System.out.println("\nSorted order: "); 
    for (int element : values) 
     System.out.print(element + " "); 

    System.out.println(); 

    System.out.print("\n Selection Sort Swaps:" + IntSelectionSorter.count); 
    System.out.print("\n Selection Sort Comparisons:" + IntSelectionSorter.count2); 

    System.out.println(); 

    System.out.println("\nOriginal Order: "); 
    for (int element : values) 
     System.out.print(element + " "); 

    IntInsertionSorter.insertionSort(values); 

    System.out.println("\nSorted order: "); 
    for (int element : values) 
     System.out.print(element + " "); 

    System.out.println(); 

    System.out.print("\n Insertion Sort Swaps:" + IntInsertionSorter.count); 
    System.out.print("\n Insertion Sort Comparisons:" + IntInsertionSorter.count2); 
} 

}

 Смежные вопросы

  • Нет связанных вопросов^_^