как напечатать 4-е итерации в сортировке выбора в java и решение для следующих тестовых случаев - PullRequest
1 голос
/ 23 марта 2020

Сортировать заданный набор чисел, используя Выбор сортировки.

Первая строка ввода содержит количество элементов, вторая строка ввода содержит номера для сортировки. В выходных данных выведите состояние массива на 4-й итерации и окончательный отсортированный массив в заданном формате

Logic Test Case 1

Input (stdin)
5

25 47 11 65 1

Expected Output

1 11 25 65 47 

Sorted Array:

1 11 25 47 65
Logic Test Case 2

Input (stdin)
7

14 83 25 47 9 77 1

Expected Output

1 9 14 47 83 77 25 

Sorted Array:

1 9 14 25 47 77 83

. Пожалуйста, попробуйте решить эту проблему в java.

Ответы [ 2 ]

1 голос
/ 23 марта 2020

Я хотел бы спросить вас, зачем вам печатать 4-ю итерацию? Но, с другой стороны, вы можете реализовать алгоритм сортировки выбора и сосчитать итерации в l oop, когда дело доходит до четырех, вы можете распечатать его и продолжить все l oop до тех пор, пока не будет отсортирован полный набор чисел.

public class SelectionSort {

  public SelectionSort() {

  }

  int [] a={1 ,11 ,25 ,65 ,47 };

  public void getSorted(){

  for(int i=0;i<a.length-1;i++){

    if(i==3) {

      for (int o = 0; o < a.length; o++)
        System.out.printf("%d ",a[o]);

      System.out.println();

    }

    int min=i;
    boolean depend=false;

    for(int j=i;j<a.length-1;j++){

      if(a[min] > a[j+1]) {

        min = j + 1;
        depend=true;

      }

    }

    if(depend==true)
      this.swap(i,min);

  }

    System.out.println("Sorted array :");

  for(int i=0;i<a.length;i++)
    System.out.printf("%d ",a[i]);

  }

  private void swap(int i, int min){

    int temp=a[i];
    a[i]=a[min];
    a[min]=temp;

  }

}

В этом конкретном алгоритме сортировки выбора, когда вы хотите напечатать 4-ю итерацию, он печатает массив, когда i==3 возвращает true. Мы ожидаем, что i будет 3 на 4-й итерации, потому что мы индексируем массив из 0.

1 голос
/ 23 марта 2020

Код ниже работает так, как вы ожидаете в вопросе.

PS - Обязательно попробуйте что-нибудь самостоятельно, вместо того, чтобы задавать вопрос напрямую.

import java.util.Arrays;

public class SelectionSort {

private static void sort(int[] arr) {
    int n = arr.length;
    for (int i = 0; i < n - 1; i++) {
        int minIdx = i;
        for (int j = i + 1; j < n; j++)
            if (arr[j] < arr[minIdx])
                minIdx = j;

        // Swap number to correct position
        int temp = arr[minIdx];
        arr[minIdx] = arr[i];
        arr[i] = temp;
        if (i == 2) { // 0 based index, 2 - is the fourth iteration [n-1]
            print(arr);
        }
    }
}

private static void print(int[] arr) {
    Arrays.stream(arr).forEach(value -> System.out.print(value + " "));
    System.out.println();
}

public static void main(String[] args) {
    // Test 1
    int[] arr1 = new int[]{25, 47, 11, 65, 1};
    sort(arr1);
    print(arr1);


    // Test 2
    int[] arr2 = new int[]{14, 83, 25, 47, 9, 77, 1};
    sort(arr2);
    print(arr2);
}
...