public static void sort(int[] array) {
int mas[] = new int[array.length];
for (int i = 0; i < array.length-1; i++){
mas[i] = array[i];
}
for (int i = 0; i < array.length-1; i++){
for (int a = 0; a < array.length-1; a++){
if (mas[i] < array[a]){
mas[i] = array[a];
}
}
}
}Руслан
28 уровень
Помогите- пжлст - Нужно отсортировать числа! Что я упустил?
Решен
Комментарии (16)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Dimantchick
8 апреля 2020, 08:05
Условие выхода из цикла не верно. Используется или и < длины или и <= длина -1.
Ты просто в массив mas записываешь максимальные значения из массива array.
В курсе обучения была статья от профессора по методам сортировки (может еще не дошел или пропустил). В любом случае прочитай хотя бы про пузырьковую сортировку (bubble sort). Сортировки - очень важны в программировании, поэтому стоит уделить этому достаточно внимания.
Ну и пройдись по своему алгоритму в уме или на бумажке с простым массивом 3, 2, 1 и сразу станет понятно, что он делает.
0
РусланSystem Administrator в courtExpert
8 апреля 2020, 08:12
а при чем здесь длина?
0
Dimantchick
8 апреля 2020, 08:15
С телефона пишу на работе потому в 2 захода. Посмотри полный ответ.
0
Dimantchick
8 апреля 2020, 08:19
Длина здесь при том.
Массив array = 1, 2, 3
После копирования его в mas в цикле ты получишь mas = 1, 2, 0
Т.е. одно число уже потеряно и любой алгоритм дальше на основе mas будет неверным!
0
РусланSystem Administrator в courtExpert
8 апреля 2020, 08:31
Спасибо не было еще этой темы. буду изучать :)
0
ГоффMaster
8 апреля 2020, 17:22
Добавлю ещё ко многому здесь сказанному. Если сортировать числа, то можно сначала перемножить все на -1, отсортировать встроенным методом, а потом перемножить на -1 обратно.
Ещё вариант - можно скопипастить код сортировки из встроенной библиотеки (в Идее раз плюнуть) и модифицировать его так, что бы сортировка шла по убыванию.
0
ГоффMaster
8 апреля 2020, 06:47
У тебя на выходе вроде будет массив из одинаковых чисел.
0
ГоффMaster
8 апреля 2020, 06:48
А упустил, кажется, вот это
0
Dimantchick
8 апреля 2020, 08:16
Кроме последнего, где будет 0 :)
0
Алексей
8 апреля 2020, 08:35
кроме пузырька чем то пользуетесь, если сами реализацию делаете?
п.с. я серьезно :)
0
Dimantchick
8 апреля 2020, 10:36полезный
Если пишу реализацию под такого типа задачи, то 99% пузырек. Или ленивый метод, если задача позволяет, через Arrays.sort(). Где-то даже обратную сортировку им делал (сорт, а потом циклом с полмассива перевернуть)
Автору тоже советую к такой функции присмотреться, чтобы не изобретать велосипед.
А так есть еще прием Arrays.asList() запихать в Collections.sort() и Collections.reverseOrder(). Еще там есть компараторы для более сложных вариантов, но эту тему я еще не проходил тут.
+1
Алексей
8 апреля 2020, 10:41
в смысле .sort(array, Collections.reversedOrder()) для обратной?
0
Dimantchick
8 апреля 2020, 10:43
О. Точняк. Не обращал внимания на компаратор в аррейс :)
0
hidden #598481
8 апреля 2020, 10:44
Массив примитивов так не отсортируешь по убыванию
https://stackoverflow.com/questions/1694751/java-array-sort-descending
https://stackoverflow.com/questions/215271/sort-arrays-of-primitive-types-in-descending-order
0
Dimantchick
8 апреля 2020, 10:50
Сходу варианты:
Arrays.sort(array) затем цикл (собственно он по второй ссылке и предложен).
Переобернуть массив примитивов в обертки в списке, а потом коллекционные функции.
Сторонние библиотеки (рановато для них)
Если подумать, можно еще извратиться.
Вот если важна скорость и производительность, то это тема для статьи хотяб на хабре, но никак не тема глубокого изучения на раннем этапе.
0
hidden #598481
8 апреля 2020, 11:00
1. Прощенаписать сортировку
2. Это не отсортирует исходный массив, а даст новый массив отсортированных оберток
3. Можно, но несложно и самому утилитный класс с реализацией сортировки написать. По сути это либо ты сам (свой класс), либо кто-то за тебя (либа) напишет ту же самую сортировку, а ты в своем решении будешь просто использовать написанный метод.
Что касается производительности, то тут все давно известно, и выше головы не прыгнешь. Это как правило либо O(n^2) либо O(n*log(n)) в зависимости от алгоритма.
0