Случайная сортировка массива java

Случайная сортировка массива java

Если тема для вас новая, и вы еще не знакомы с алгоритмами сортировки, то наверняка при решении задачи «Отсортировать массив по возрастанию» первое что придет в голову, это перебор, то есть: найти минимальный элемент и поменять его местами с начальным, потом, в оставшейся части массива (кроме первого элемента), найти снова минимальный элемент и поменять его со вторым элементом и т.д. Такой алгоритм называется Сортировка выбором. Рассмотрим его подробнее.

public static void selectionSort(int[] arr) < /*По очереди будем просматривать все подмножества элементов массива (0 - последний, 1-последний, 2-последний. )*/ for (int i = 0; i < arr.length; i++) < /*Предполагаем, что первый элемент (в каждом подмножестве элементов) является минимальным */ int min = arr[i]; int min_i = i; /*В оставшейся части подмножества ищем элемент, который меньше предположенного минимума*/ for (int j = i+1; j < arr.length; j++) < //Если находим, запоминаем его индекс if (arr[j] < min) < min = arr[j]; min_i = j; >> /*Если нашелся элемент, меньший, чем на текущей позиции, меняем их местами*/ if (i != min_i) < int tmp = arr[i]; arr[i] = arr[min_i]; arr[min_i] = tmp; >> >

СОРТИРОВКА МЕТОДОМ ПУЗЫРЬКА (BUBBLE SORT).

Алгоритм проходит массив от начала и до конца, сравнивая попарно соседние элементы, Если элементы стоят в неправильном порядке, то они меняются местами, таким образом, после первого прохода на конце массива оказывается максимальный элемент (для сортировки по возрастанию). Затем проход массива повторяется, и на предпоследнем месте оказывается другой наибольший после максимального элемент и т.д. В итоге, наименьший элемент постепенно перемещается к началу массива («всплывает» до нужной позиции как пузырёк в воде).

Реализация алгоритма Сортировка пузырьком на Java (по возрастанию):

public static void bubbleSort(int[] arr) < /*Внешний цикл каждый раз сокращает фрагмент массива, так как внутренний цикл каждый раз ставит в конец фрагмента максимальный элемент*/ for(int i = arr.length-1 ; i >0 ; i--) < for(int j = 0 ; j < i ; j++)< /*Сравниваем элементы попарно, если они имеют неправильный порядок, то меняем местами if( arr[j] >arr[j+1] ) < int tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; >> > >

ПРИМЕРЫ.

Рассмотрим примеры того, как можно воспользоваться выше приведенными алгоритмами.
Для начала создадим массив. Это можно сделать так:

Или мы можем создать массив случайных чисел:

int arr[] = new int[10]; for(int i = 0; i < arr.length; i++) < //элементу массива присваивается случайное число от 0 до 99 arr[i] = (int)(Math.random() * 100); System.out.print(arr[i] + " "); >

Затем воспользуемся вышеприведёнными алгоритмами сортировки:

Читайте также:  Чем заменить select html

System.out.print(«\n»); bubbleSort(arr); for(int i = 0; i
System.out.print(«\n»); selectionSort(arr); for(int i = 0; i

Важно понимать, что сортировки выбором и пузырьком являются простыми, но неэффективными для больших массивов. Эти алгоритмы являются скорее учебными и практически не применяются в жизни. Вместо них используются более эффективные алгоритмы. Подробнее о разных алгоритмах можно прочитать, например, на википедии.

В наше время нет необходимости самостоятельно реализовывать алгоритмы для сортировки, поскольку все что нам нужно, уже имеется в стандартных библиотеках Java.

СОРТИРОВКА МАССИВА ПРИ ПОМОЩИ МЕТОДА SORT() ИЗ КЛАССА ARRAYS.

Метод sort() из класса Arrays использует усовершенствованный алгоритм Быстрой сортировки (Quicksort), который эффективен в большинстве случаев. Для того чтобы отсортировать массив, необходимо написать всего одну строку.

Arrays.sort(arr);// где arr это имя массива

Примечание: в начале файла предварительно нужно подключить библиотеку java.util.

СОРТИРОВКА МАСССИВА ЦЕЛЫХ ЧИСЕЛ ПО ВОЗРАСТАНИЮ.

//Создаем массив случайных чисел int arr[] = new int[10]; for(int i = 0; i < arr.length; i++) < arr[i] = (int)(Math.random() * 100); System.out.print(arr[i] + " "); >System.out.print(«\nSorted: \n»); //Сортируем массив Arrays.sort(arr); //Выводим отсортированный массив на консоль. for(int i = 0; i

СОРТИРОВКА МАССИВА ЦЕЛЫХ ЧИСЕЛ ПО УБЫВАНИЮ.

//Создаем массив случайных чисел Integer arr[] = new Integer[10]; for(int i = 0; i < arr.length; i++) < arr[i] = (int)(Math.random() * 100); System.out.print(arr[i] + " "); >System.out.print(«\nSorted: \n»); //Сортируем массив Arrays.sort(arr, Collections.reverseOrder()); //Выводим отсортированный массив на консоль. for(int i = 0; i

Обратите внимание, что при сортировке массива в обратном порядке (по убыванию) нужно использовать тип Integer[] вместо примитивного типа int[].

СОРТИРОВКА МАССИВА СТРОК В JAVA.

String[] names = new String[] ; Arrays.sort(names); for(int i = 0; i

В этом примере массив имен сортируется в порядке от А до Я. Для того чтобы отсортировать массив в обратном порядке, необходимо в методе sort() указать Collections.reverseOrder().

Arrays.sort(names, Collections.reverseOrder());

К сожалению, по умолчанию метод sort() сортирует только примитивные типы данных и строки.

Источник

Java — random sort array

Efe-V

In this short article, we would like to show how in Java, sort array to archive random order.

The below example implements Fisher–Yates shuffle algorithm:

package com.example; import java.util.Arrays; import java.util.Random; public class Program < public static void main(String[] args) throws Exception < int[] array = < 1, 2, 3, 4, 5 >; Random random = new Random(); for (int i = array.length - 1; i > 0; --i) < int j = random.nextInt(i); int tmp = array[i]; array[i] = array[j]; array[j] = tmp; >System.out.println(Arrays.toString(array)); > >

Reusable code example

This section contains class prepared co copy as util.

Alternatively, you can use ArrayUtils.shuffle() method provided by Apache Lang library (installation instruction here).

package com.example; import java.util.Arrays; public class Program < public static void main(String[] args) throws Exception < Integer[] array = < 1, 2, 3, 4, 5 >; ArrayUtils.shuffle(array); System.out.println(Arrays.toString(array)); > > 
package com.example; import java.util.Random; public class ArrayUtils < public static void shuffle(T[] array) < Random random = new Random(); for (int i = array.length - 1; i >0; --i) < int j = random.nextInt(i); T tmp = array[i]; array[i] = array[j]; array[j] = tmp; >> >

References

Источник

Читайте также:  CSS overflow

Кофе-брейк #213. Как сортировать примитивные массивы в Java. Прекратите использовать исключения в Java

Java-университет

Кофе-брейк #213. Как сортировать примитивные массивы в Java. Прекратите использовать исключения в Java - 1

Источник: Asynq В этом руководстве рассмотрены три варианта сортировки примитивных массивов в Java. Предположим, у нас есть массив int[] и нам нужно отсортировать этот массив по возрастанию и убыванию.

Входной массив

Вариант 1

В первом случае мы будем использовать Arrays.sort() . Этот метод требует передачи массива объектов, и поскольку нам предоставлен примитивный массив, то придется выполнить упаковку (boxing). Для преобразования примитивного типа в объектный Stream API предоставляет boxed() .

 Integer[] arrBoxed = Arrays .stream(arr) .boxed() .toArray(Integer[]::new); Arrays.sort(arrBoxed); System.out.println(Arrays.toString(arrBoxed)); 

Если тип возвращаемого значения должен быть int[] , тогда мы можем сопоставить его с примитивным типом, используя Stream API.

 int[] ints = Arrays.stream(arrBoxed).mapToInt(a -> a).toArray(); 

Тип сортировки по умолчанию будет обозначена по возрастанию. Если же нам нужна сортировка по убыванию, тогда нужно использовать компаратор.

 Arrays.sort(arrBoxed, Comparator.reverseOrder()); Arrays.sort(arrBoxed, (a,b) -> (b-a)); // lambda 

Вариант 2

 int[] sortedArr = Arrays.stream(arr).sorted().toArray(); System.out.println(Arrays.toString(sortedArr)); 

Тип сортировки по умолчанию — по возрастанию. Если нам нужен тип сортировки по убыванию, тогда нам нужно немного изменить описанный выше подход. Stream API обеспечивает сортировку по типу объекта, который принимает компаратор, поэтому мы можем передать компаратор для определения порядка сортировки. Но есть нюанс — поскольку Stream API для примитива предоставляет метод sorted() , который не принимает никакого аргумента компаратора, мы не можем передать порядок. Таким образом, мы должны сначала упаковать примитивный тип в тип объекта, используя boxed() .

 int[] reverseSortedArr = Arrays.stream(arr) .boxed() .sorted(Collections.reverseOrder()) .mapToInt(a ->a) .toArray(); 

Вариант 3

Этот вариант немного громоздок, так как требует слишком много преобразований и инициализаций. Для сортировки массива мы будем использовать Collections.sort() . Но функция Collections.sort() принимает в качестве аргумента список (list), поэтому сначала нам нужно преобразовать наш входной массив в список. Если мы используем Arrays.asList() , то мы получим List из-за примитивной природы входного массива целых чисел.

 List ints1 = Arrays.asList(ints); 

Здесь лучший способ — упаковать тип, а затем преобразовать его в список. При этом мы все еще инициализируем новый ArrayList со списком возврата из Stream API. Это связано с тем, что нам нужен изменяемый список для сортировки массива, а toList() предоставляет неизменяемый список, который мы не можем использовать для сортировки.

 ArrayList integers = new ArrayList<>(Arrays .stream(arr) .boxed() .toList() ); 

Получив список целых чисел ArrayList , мы можем использовать метод Collections.sort() для его сортировки.

 ArrayList integers = new ArrayList<>(Arrays.stream(arr).boxed().toList()); Collections.sort(integers); // Collections.sort(integers, Comparator.reverseOrder()); sort in reverse System.out.println(integers); 

Заключение

В этой статье мы обсудили три различных варианта сортировки массива в Java. Мы также рассмотрели преобразование типа из примитива в объект и как это сделать с помощью Stream API Java 8.

Прекратите использовать исключения в Java

Кофе-брейк #213. Как сортировать примитивные массивы в Java. Прекратите использовать исключения в Java - 2

Источник: Medium Изучив эту публикацию, вы узнаете причины, из-за которых вам следует отказаться от использования исключений в Java. Исключения (Exceptions) — это мощная функция Java, которая позволяет разработчикам структурированным и изящным образом обрабатывать ошибки и неожиданное поведение. Однако бывают случаи, когда исключения используются не по назначению, что приводит к раздутому и трудночитаемому коду.

Исключения стоят дорого

Генерация исключения в Java — дорогостоящая операция. При возникновении исключения виртуальная машина Java (JVM) должна выполнить несколько действий, чтобы раскрутить стек вызовов, найти соответствующий блок catch и выполнить его. Этот процесс может быть медленным и способен существенно повлиять на производительность вашего кода.

Исключения усложняют понимание кода

Когда вы используете исключения для управления потоком вашего кода, может стать трудно понять поведение вашей программы. Обработка исключений усложняет понимание кода, становится труднее предсказать его поведение при возникновении исключений.

Исключения могут скрывать ошибки

Когда вы используете исключения для обработки неожиданного поведения, можно легко пропустить ошибки и другие проблемы в вашем коде. Вместо устранения основной причины проблемы у вас может возникнуть соблазн перехватить исключение и двигаться дальше. Это может привести к тому, что код будет сложно поддерживать и отлаживать.

Исключения могут использоваться не по назначению

Разработчики часто используют исключения для потока управления, что не является их целью. Исключения следует использовать для обработки непредвиденных тельных ситуаций, а не для управления потоком кода. Неправильное использование исключений может затруднить чтение и понимание кода.

Исключения могут вызвать проблемы с безопасностью

Когда исключения не обрабатываются должным образом, они могут вызвать проблемы с безопасностью в вашем коде. Например, если исключение содержит конфиденциальную информацию, она может быть передана злоумышленнику. Чтобы избежать этих проблем, важно тщательно обрабатывать исключения и раскрывать пользователю только необходимую информацию.

Существуют альтернативы исключениям

  1. Используйте коды ошибок или возвращаемые значения. Вместо создания исключения при возникновении ошибки вы можете вернуть код или значение ошибки, чтобы указать, что что-то пошло не так. Это может быть более эффективным и предсказуемым, чем использование исключений.
  2. Используйте блок try-catch экономно. Блоки try-catch полезны для обработки исключений, но ими также можно злоупотреблять. Рассмотрите возможность их использования только в действительно исключительных ситуациях и обрабатывайте ожидаемые ошибки с помощью других методов.
  3. Используйте утверждения (assertions). Утверждения — это мощный инструмент для обнаружения ошибок на ранних этапах процесса разработки. Они позволяют вам проверять предположения о вашем коде и преждевременно завершать работу, если что-то идет не так.
  4. Используйте логирование. Логирование может стать эффективным способом отслеживания ошибок и неожиданного поведения в вашем коде. Регистрируя ошибки и предупреждения, вы можете упростить отладку кода и понять поведение своей программы.

Источник

Оцените статью