2015-10-28 4 views
0

По какой-то причине я не могу получить счетчик для сравнения и свопинга в части InsertionSort, он просто выводит ноль. И когда я выделяю код для него, он выводит ряд свопов и сравнений (хотя я не знаю, если это неправильно или нет, возможно, неправильно, учитывая, что число одинаково для обоих), и массив не отсортирован вообще. Я очень смущен, почему это не работает, любая помощь очень ценится!Вставка сортировки: подсчеты и сравнения

Обновление: экземпляр пузыря передавался как для выбора, так и для вставки, теперь, когда это исправлено, T также имеет проблему с частью выбора. Любые предложения по их устранению?

Обновление 2: Исправлена ​​часть выбора! Все еще путают вставку.

import java.util.Scanner; 

public class Sorting { 

public static void main(String[] args) { 

    int n, c; 
Scanner scan = new Scanner(System.in); 

System.out.print("Number of elements: "); 
n = scan.nextInt(); 
int[] bubbleSortArray = new int[n]; 
int[] selectionSortArray = new int[n]; 
int[] insertionSortArray = new int[n]; 

System.out.print("Enter " + n + " elements: "); 

for (c = 0; c < n; c++) { 
    int i = scan.nextInt(); 
    bubbleSortArray[c] = i; 
    selectionSortArray[c] = i; 
    insertionSortArray[c] = i; 
} 

BubbleSort(bubbleSortArray); 
SelectionSort(selectionSortArray); 
InsertionSort(insertionSortArray); 

} 


static void BubbleSort(int[] array) { 

    int n = array.length; 
    int cm = 0; 
    int sw = 0; 

    for (int c = 0; c < (n - 1); c++) { 
     for (int d = 0; d < n - c - 1; d++) { 
      cm++; 
      if (array[d] > array[d + 1]) { 
       int swap = array[d]; 
       array[d] = array[d + 1]; 
       array[d + 1] = swap; 
       sw++; 
      } 
     } 
    } 

    System.out.print("Bubble sort: "); 

    for (int c = 0; c < n; c++) { 
     System.out.print(array[c] + " "); 


    } 
    System.out.println("- " + cm + " comparisons, " + sw + " swaps"); 
} 

static void SelectionSort(int[] array) { 

    int n = array.length; 
    int cm = 0; 
    int sw = 0; 

    for (int c = 0; c < n - 1; c++) { 
      int index = c; 
      for (int d = c + 1; d < n; d++){ 
       cm++; 
       if (array[d] < array[index]) 
        index = d; 
      } 
      int temp = array[index]; 
      sw++; 
      array[index] = array[c]; 
      array[c] = temp; 
     } 
     System.out.print("Selection sort: "); 
     for (int c = 0; c < n; c++) { 
      System.out.print(array[c] + " "); 

      } 
     System.out.println("- " + cm + " comparisons, " + sw + " swaps"); 
     } 

static void InsertionSort(int[] array) { 

    int n = array.length; 
    int cm = 0; 
    int sw = 0; 

    for (int c = 1; c < n; c++){ 
     int temp = array[c]; 
     for (int d = c - 1; d > 0 && temp < array[d]; d--) { 
      array[d+1] = array[d]; 
      array[d+1] = temp; 
      cm++; 
      sw++; 

     } 
    } 
    System.out.print("Insertion sort: "); 
    for (int c = 0; c < n; c++) { 
     System.out.print(array[c] + " "); 


} 
    System.out.println("- " + cm + " comparisons, " + sw + " swaps"); 
    } 
} 

ответ

1

После того, как вы закончили с массивом BubbleSort, отсортированы, и вы передаете этот отсортированный экземпляр в SelectionSort и InsertionSort.

Если вы хотите, чтобы получить результаты для каждого вида сортов вы можете сделать:

int n, c; 
    Scanner scan = new Scanner(System.in); 

    System.out.print("Number of elements: "); 
    n = scan.nextInt(); 
    int[] bubbleSortArray = new int[n]; 
    int[] selectionSortArray = new int[n]; 
    int[] insertionSortArray = new int[n]; 

    System.out.print("Enter " + n + " elements: "); 

    for (c = 0; c < n; c++) { 
     int i = scan.nextInt(); 
     bubbleSortArray[c] = i; 
     selectionSortArray[c] = i; 
     insertionSortArray[c] = i; 
    } 

    BubbleSort(bubbleSortArray); 
    SelectionSort(selectionSortArray); 
    InsertionSort(insertionSortArray); 
+0

ах хорошо, я предположить что-то подобное происходит. Спасибо! Я сейчас обновляю вопрос, у меня все еще есть такая же проблема с частью вставки + выбор, который тоже не дает правильного вывода. – imaginedrragon

+0

Вставка сортировки должна быть примерно такой: 'for (int c = 1; c = 0 && temp

+0

безупречный, спасибо! – imaginedrragon

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

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