@yourdreambtw

Сколько раз меняет свое место первый по порядку элемент?

Я не могу понять в конце, в комментарии в коде я написал, что не понимаю, можете, пожалуйста , объяснить)

Массив сортируется методом выбора по возрастанию (слева направо: ищется минимум и меняется с левым элементом). Сколько раз меняет свое место первый по порядку элемент?

Входные данные
В первой строке дано одно натуральное число n — количество элементов в массиве ( 1 ≤ n ≤ 1000 ). Во второй строке содержится сам массив из n натуральных чисел. Гарантируется, что все числа различны и не превышают 10 6 .

Выходные данные
Выведите одно число — количество перемещений первого элемента.

Примеры
входные данные
3
1 3 2
выходные данные
0
входные данные
4
4 1 5 3
выходные данные
3
import java.util.Scanner;
 
public class Sortirovka4 {
    public static void main(String[] args) {
        int counter, num;
        Scanner input = new Scanner(System.in);
        System.out.println("Введите количество элементов массива: ");
        num = input.nextInt();
 
        int[] array = new int[num];
 
        System.out.println("Введите " + num + " чисел");
 
        //Заполняем массив, вводя элементы в консоль
        for (counter = 0; counter < num; counter++) {
            array[counter] = input.nextInt();
        }
 
        // сортируем массив
        selectionSort(array);
    }
 
    static void selectionSort(int[] a) {
        int N = a.length;
        int count = 0;
        int first = a[0];
        for (int i = 0; i < N - 1; i++) {
            int min = i;
            for (int j = i + 1; j < N; j++) {
                if (a[j] < a[min]) {
                    min = j;
                }
            }
            int t = a[min];
            a[min] = a[i];
            a[i] = t;
            if (a[i] == first || a[min] == first) { //по идее здесь должен быть a[j] == first, 
                    count++;                              //но я не могу понять, как это реализовать
            }
        }
        System.out.println(count);
    }
}
  • Вопрос задан
  • 481 просмотр
Пригласить эксперта
Ответы на вопрос 1
@Deathgar
Универсальный метод (элементы могут повторяться. Например: {4,1,3,8,4}).
Будут вопросы, пиши в комментарии.

static void selectionSort(int[] a) { 
           int size = a.Length;
            int numb = 0; //Номер текущего индекса первого элемента 
            int count = 0;

            for (int i = 0; i < size - 1; i++)
            {
                int min = i;
                for (int j = i + 1; j < size; j++)
                {
                    if (a[j] < a[min])
                    {
                         //Тут отслеживаем изменение индекса первого элемента
                        if (min == numb) 
                        {
                            numb = j;
                            count++;
                        }
                        else
                        {
                            if (j == numb)
                            {
                                numb = min;
                                count++;
                            }
                        }

                        min = j;
                    }
                }
                int t = a[min];
                a[min] = a[i];
                a[i] = t;
            }
        System.out.println(count);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы