Искал в итернете как решить задачу. Нашёл такой способ.
for (int i = 0; i < array.length ; i++) {
for (int j = 0; j < array.length ; j++) {
if (array[i]<array[j]) {
int min = array[j];
array[j] = array[i];
array[i] = min;
Нажал на проверку, что бы узнать какие пункты не проходят.............
Задача прошла проверку........
Почему она её прошла??? Я совсем не могу понять как сработал код.
Кто может обьяснить???
Sergey
13 уровень
Не понимаю почему работае( Помогите.
Решен
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Дмитрий
19 ноября 2021, 10:53
Решил таким образом:
package com.javarush.task.task10.task1020;
import java.io.BufferedReader;
import java.io.InputStreamReader;
/*
Задача по алгоритмам Ӏ Java Syntax: 10 уровень, 11 лекция
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int[] array = new int[30];
for (int i = 0; i < 30; i++) {
array[i] = Integer.parseInt(reader.readLine());
}
sort(array);
System.out.println(array[9]);
System.out.println(array[10]);
}
public static void sort(int[] array) {
//напишите тут ваш код
for (int k = 0; k < array.length ; k++) {
for (int i = 0; i < array.length - 1; i++) {
if (array[i] > array[i + 1]) {
int l = array[i];
array[i] = array[i + 1];
array[i + 1] = l;
}
}
}
}
}
0
Алексей
21 сентября 2021, 12:26полезный
Это сортировка массива от минимального к максимальному.
Берется один элемент массива (i) и попеременно сравнивается со всеми остальными (j), если i<j - меняют местами. Пройдясь по всем элементам, упорядочиваем массив.
+1
Sergey
22 сентября 2021, 09:42
Спасибо. Взоможно даже понял)
0
Алексей
22 сентября 2021, 10:55
Вообще, в коде избыточность, я бы так написал:
for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[i] > array[j]) {
int min = array[j];
array[j] = array[i];
array[i] = min;
}
}
}
На примере:
5 3 1 8 6
берем 1-ый элемент массива (индекс "0", значение "5") и сравниваем со 2-ым элементом массива: 5 > 3, меняем местами:
3 5 1 8 6
теперь 1 элемент массива (индекс "0", значение уже "3"), сравниваем со 3-им элементом массива: 3 > 1, меняем местами, потом с 4-ым и 5-ым. Таким образом, гарантировано получим первый элемент массива - минимальное значение, т. к. число, находящееся на 1 месте массива меньше, чем все остальные числа. В нашем случае это - "1".
Потом берется 2 место массива и повторяем, и так далее, до предпоследнего, которое сравниваем с последним.
+2
Sergey
22 сентября 2021, 11:07
вот первые две строчки это перебор масивов. или нет?
третья строчка if мы сравниваем два масива?
пятая строчка array[j] = array[i]; ьы делаем что???
и шестая строчка array[i] = min; что она делает???
В общем я не понимаю как работает.. Почему?
В вашем коде езё и -1 и +1 Что они означают?
0
Алексей
22 сентября 2021, 11:45решение
- вот первые две строчки это перебор масивов. или нет?
Нет. Мы перебираем элементы массива по индексу - https://javarush.com/groups/posts/massivy-java
Берем элемент массива с индексом "0" (первый элемент массива, первый цикл for) и последовательно сравниваем его с остальными элементами массива (второй цикл for). Т. е., в нашем случае мы сравниваем значение, находящееся в array[0] cо значением, находящемся в array[1],, потом в array[2] и т. д. Как будто цифры внутри размеченной решетки перекладываем. Во время этого процесса, значение в array[0] будет меняться, т. к. если мы находим меньшее значение далее по массиву, напр. в array[3], мы меняем значения array[0] и array[3].
Просто поменять значения между, например, array[0] и array[3] мы не можем, надо вводить 3 элемент, в нашем случае min. Мы присваиваем min значение, хранящееся в array[3], потом присваиваем array[3] значение хранящееся в array[0], потом присваиваем array[0] значение, хранящееся в min. Таким образом, мы поменяли местами значения, которые хранились в array[0] и array[3]. Это и делают строки 4, 5, 6.
В первом цикле мы проходим до предпоследнего элемента массива, потому что последний нам не с чем уже сравнивать. В случае длины массива array.length = 5, последний элемент массива будет под индексом "4", а предпоследний - под индексом "3".
Во втором цикле мы начинаем со следующего за проверяемым элементом - т. е., если первый элемент array[0], то проверку мы начнем с array[1] и т. д. И в этом цикле нам надо идти до последнего элемента массива.
Берем элемент массива с индексом "0" (первый элемент массива, первый цикл for) и последовательно сравниваем его с остальными элементами массива (второй цикл for). Т. е., в нашем случае мы сравниваем значение, находящееся в array[0] cо значением, находящемся в array[1],, потом в array[2] и т. д. Как будто цифры внутри размеченной решетки перекладываем. Во время этого процесса, значение в array[0] будет меняться, т. к. если мы находим меньшее значение далее по массиву, напр. в array[3], мы меняем значения array[0] и array[3].
Просто поменять значения между, например, array[0] и array[3] мы не можем, надо вводить 3 элемент, в нашем случае min. Мы присваиваем min значение, хранящееся в array[3], потом присваиваем array[3] значение хранящееся в array[0], потом присваиваем array[0] значение, хранящееся в min. Таким образом, мы поменяли местами значения, которые хранились в array[0] и array[3]. Это и делают строки 4, 5, 6.
В первом цикле мы проходим до предпоследнего элемента массива, потому что последний нам не с чем уже сравнивать. В случае длины массива array.length = 5, последний элемент массива будет под индексом "4", а предпоследний - под индексом "3".
Во втором цикле мы начинаем со следующего за проверяемым элементом - т. е., если первый элемент array[0], то проверку мы начнем с array[1] и т. д. И в этом цикле нам надо идти до последнего элемента массива. +4
Sergey
22 сентября 2021, 13:35
Благодарю.
+1