Задача по алгоритмам

  • 5
  • Недоступна
Вероятно, вы уже знаете упорядоченных изоморфов с планеты Линейный Хаос, которые любят алгоритмы сортировки, поскольку ими думают. Вот вам задачка для изоморфов младшего школьного возраста: введите с клавиатуры 20 слов и выведите их в алфавитном порядке. А как сортировать? Придумайте, вы уже почти что линейный изоморф!
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (147)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Николай9 уровень
9 июля, 22:24
Решал через пузырек, никак не мог добиться чтобы слова шли по возрастанию. Плюнул, чтобы не потерять код скопировал на проверку (думаю на работе еще посижу, подумаю), а валидатор его принял - ему то нужна была сортировка по начальной букве ))
Ilya Ivanov10 уровень, Казань
вторник, 12:53
по заданию так и написано
Albert9 уровень
24 июня, 16:39
Метод isGreaterThan лишь дает значение true или false для условия (if) которое появится в сортировке пузырьком. Сортировка: каждый элемент сравнивается с каждым. Нужно только правильные границы в цикле задать. Первый цикл у меня такой: for(int i=0;i<array.length-1;i++){
Wladyslaw17 уровень
19 июня, 17:53
А как насчет регистра? Реализованный метод из интерфейса Comparable в String исполняет лексикографическую сортировку по алфавиту с учетом регистра. То-бишь символ в верхнем регистре он считает > символа в нижнем регистре, соответственно в массиве порядок будет такой : Сначала все строки в верхнем регистре по алфавиту -> все строки в нижнем регистре по алфавиту. Это ли имелось ввиду в задаче или же нужно реализовать сортировку по алфавиту без учета регистра?
MartyMcAir16 уровень
14 июня, 18:54
Не простая задача (добавил в закладки). Возможно наглядно понятнее будет что делает isGreaterThan (да сравнивает строки понятно):
System.out.println(isGreaterThan("a", "b")); // false
System.out.println(isGreaterThan("b", "a")); // true
System.out.println(isGreaterThan("A", "B")); // false
System.out.println(isGreaterThan("B", "A")); // true
System.out.println(isGreaterThan("A", "b")); // false
System.out.println(isGreaterThan("b", "A")); // true
т.е. Везде где следует B а потом A - метод возвращает true _ вот оно пространство для размышлений, о том как в массиве делать перестановку. При вставке этого ветвления в цикле другого цикла:
if (!isGreaterThan(current.substring(0).toLowerCase(), beafore.substring(0).toLowerCase())) {
                    array[i - 1] = current;
                    array[i] = beafore;
                }
из массива String[] array = {"a", "b", "c", "a", "b", "c", "a", "b", "c"}; выдаст [a, a, a, b, b, b, c, c, c] __ Но это не верно т.к., требуется чтоб сравнение было посимвольным лексикографическим, да и ещё может попасться не только нижний регистр (или не только верхний). Решение в пузырьковой сортировке и подставкой туда в if(..) метода isGreaterThan(..)
Max15 уровень
7 июня, 08:21
Еще способ, если в лом писать. Решил в одну строчку: Arrays.parallelSort(array); а на метод isGreaterThan кинул заглушку. Profit
md23 уровень
20 июня, 07:37
Чувак, ты гений))) Я решил тоже сортом но про заглушку не подумал, а ведь принимает с заглушкой то!))
Derp 10 уровень, Санкт-Петербург
23 июня, 14:27
я подумал, что шота сложна, сделал Arrays.sort, компилятор не разрешил без метода, в итоге переписал метод и запихал его в сорт.
Alex_330298738 уровень, Москва
24 июня, 12:58
тоже сортом сделал... с заглушкой... зачем велик изобретать...
Алексей13 уровень, Санкт-Петербург
28 июня, 06:48
Сделал также через Arrays.sort(array). Заглушка if(isGreaterThan("a", "б")). читерство, но ТЗ-то выполнено)))
Mary15 уровень
3 июля, 13:41
А как сделать заглушку?) Расскажите, пож-та
Sherlock040413 уровень, Москва
26 мая, 12:31
А кто-нибудь может объяснить зачем этот метод - public static boolean isGreaterThan(String a, String b) нужен? Просто если использовать Arrays.sort(array), то по сути сортировка уже произойдет и зачем тогда нужно сравнивать 2 строки между собой в 3м методе?
Mikhail17 уровень, Санкт-Петербург
29 мая, 10:42
Чтобы разобраться в том, как реализуется сравнение (ищешь принцип работы метода compareTo, в результате натыкаешься на интерфейс Comparator). Иными словами, такие задания, на мой взгляд, даются для того, чтобы у изучающего складывалось в голове то, как тот или иной функционал устроен "под капотом".
Sherlock040413 уровень, Москва
30 мая, 16:45
спасибо)
Руслана13 уровень
15 мая, 16:01
1.Я в методе sort() истпользовала цикл с пузырьковой сортировкой с двумя for. 2.Во втором for я вставила if (isGreaterThan(array[x], array[i])), т е вызвала метод isGreaterThan(String a, String b).
Igor Zip16 уровень, Одесса
15 мая, 13:09
Бесит, когда некоторые товариСчи пишут решения на данном уровне через -> или  => ! Я так понял что это лямбда выражения! А есть умники, напишите через 000001110101010100100100110! Но типа в двоичном коде! Мля на данном этапе этого нету! И не говорите, что нужно гУУУУглить! И развиваться!
Mikhail17 уровень, Санкт-Петербург
29 мая, 10:46
Нужно гуглить и развиваться :) Вообще, лямбды сильно упрощают жизнь и сокращают объем кода. Если я, скажем, решал подобную задачу на Python при помощи лямбд, то почему бы мне не попробовать осуществить тоже самое на Java? Если я не знаю, как это сделать на Java, я пойду в интернет и поищу в документации нужные позиции, в результате чего узнаю что-то новое. Не понимаю, почему Вас раздражает решение ДРУГОГО человека.
Иван Мозгачев13 уровень, Москва
21 апреля, 07:27
Ну метод сортировки можно использовать разный. У меня проблема была в том, что сортировка происходила, но игнорировала регистр (так валидатор не пройдет, нужно учитывать регистр). Метод пузырька решит задачу просто.
finetyro16 уровень
16 апреля, 13:26
Зы. Использовал свой же код, который был в задаче про 5 лучших. Хорошо хоть только первые буквы учитываются, а не все, был бы тихий ужас. Хотя, интересно!
Mikhail17 уровень, Санкт-Петербург
29 мая, 10:49
Все символу учитываются. Сравнение происходит посимвольно лексикографически.