Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2017, 21:06   #1
General_Yamamoto
Новичок
Джуниор
 
Регистрация: 06.02.2017
Сообщений: 2
Вопрос Сортировка массива по модулю чисел

Доброго времени суток. Столкнулся с такой задачей- упорядочить элементы массива по модулю их значений. Упорядочивание должно происходить по возрастанию.
А теперь в чем проблема- в JAVA я новичок, с модулями не сталкивался. Написал программу, которая упорядочивает элементы, но не по модулю. Соответственно, и результат не тот. Пример:

Массив:
[7, 0, 2, 2, -7, -1, 3, 8, -2, -8]
[-8, -7, -2, -1, 0, 2, 2, 3, 7, 8]

В общем, прошу разъяснить, как оформляется модуль числа и какие есть методы сортировки по модулю.

Программу прилагаю:

Код:
public class Sort3 {
    public static void main(String[] args) {
    int[] a = new int[10];
    for (int i = 0; i < a.length; i++) {
        a[i] = (int) Math.round((Math.random() * 20) - 10);
    }
    System.out.println("Массив:");
    System.out.println(Arrays.toString(a));
    int arrayStart = 0, arrayEnd = a.length - 1;
    
    quickSort(a, arrayStart, arrayEnd);
    System.out.println(Arrays.toString(a));
}
    private static void quickSort(int[] a, int arrayStart, int arrayEnd) {
    	int half = arrayStart + (arrayEnd - arrayStart) / 2;
    	int basis = a[half];
    	int i = arrayStart, j = arrayEnd;
    	
    	while (i<=j) {
    		while (a[i] < basis) i++;
    		while (a[j] > basis) j--;
    		
    		if (i <= j) {
    			int tmp = a[i];
    			a[i] = a[j];
    			a[j] = tmp;
    			i++;
    			j--;
    		}
    	}
    	
    	if (arrayStart < j) quickSort(a, arrayStart, j);
    	if (arrayEnd > i) quickSort(a, i, arrayEnd);
    }
}
General_Yamamoto вне форума Ответить с цитированием
Старый 07.02.2017, 11:20   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

я не особо мастер.

Но попробуйте такой код:

Код:
 private static void quickSort(int[] a, int arrayStart, int arrayEnd) {
    	int half = arrayStart + (arrayEnd - arrayStart) / 2;
    	int basis = java.lang.Math.abs( a[half] );
    	int i = arrayStart, j = arrayEnd;
    	
    	while (i<=j) {
    		while (java.lang.Math.abs(a[i]) < basis) i++;
    		while (java.lang.Math.abs(a[j]) > basis) j--;
    		
    		if (i <= j) {
    			int tmp = a[i];
    			a[i] = a[j];
    			a[j] = tmp;
    			i++;
    			j--;
    		}
    	}
    	
    	if (arrayStart < j) quickSort(a, arrayStart, j);
    	if (arrayEnd > i) quickSort(a, i, arrayEnd);
    }
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.02.2017, 14:56   #3
alexey_kip
Форумчанин
 
Регистрация: 19.11.2011
Сообщений: 198
По умолчанию

Цитата:
List<Integer> one = new ArrayList<>(Arrays.asList(1,2,-5,0,4,3));

one.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(Math.abs(o1), Math.abs(o2));
}
});
Оно?
alexey_kip вне форума Ответить с цитированием
Старый 07.02.2017, 14:57   #4
alexey_kip
Форумчанин
 
Регистрация: 19.11.2011
Сообщений: 198
По умолчанию

Вот тоже самое на java8
Цитата:
List<Integer> one = new ArrayList<>(Arrays.asList(1,2,-5,0,4,3));
one.sort(Comparator.comparingInt(Ma th::abs));
alexey_kip вне форума Ответить с цитированием
Старый 08.02.2017, 18:27   #5
General_Yamamoto
Новичок
Джуниор
 
Регистрация: 06.02.2017
Сообщений: 2
По умолчанию

Благодарю всех за помощь, + реп.
General_Yamamoto вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив из N целых чисел. Получить из него массив чисел по модулю меньших 10 и отсортировать его(язык си++) mitja-zakelidis Помощь студентам 2 15.03.2012 03:10
Сортировка массива с исключением одинаковых чисел. A-IX-2 Общие вопросы Delphi 3 17.03.2011 00:22
Считывание из файла чисел, сортировка массива с++ Tresk Помощь студентам 13 07.11.2010 20:01
Найти среди чисел пару чисел с минимальной по модулю разностью stas135642 Общие вопросы C/C++ 2 31.10.2010 12:40
Сортировка массива чисел Roberto Помощь студентам 1 02.04.2008 23:19