По какой-то причине я не могу получить счетчик для сравнения и свопинга в части 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");
}
}
ах хорошо, я предположить что-то подобное происходит. Спасибо! Я сейчас обновляю вопрос, у меня все еще есть такая же проблема с частью вставки + выбор, который тоже не дает правильного вывода. – imaginedrragon
Вставка сортировки должна быть примерно такой: 'for (int c = 1; c = 0 && temp
безупречный, спасибо! – imaginedrragon