Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Java.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
3.45 Mб
Скачать

1.19.2 Сортировка массива

Сортировкой называется такой процесс перестановки элементов массива, когда все его элементы выстраиваются по возрастанию или по убыванию.

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

Существуют универсальные алгоритмы, которые выполняют сортировку вне зависимости от того, каким было исходное состояние массива. Но кроме них существуют специальные алгоритмы, которые, например, очень быстро могут отсортировать почти упорядоченный массив, но плохо справляются с сильно перемешанным массивом (или вообще не справляются). Специальные алгоритмы нужны там, где важна скорость и решается конкретная задача, их подробное изучение выходит за рамки нашего курса.

Сортировка выбором

Рассмотрим пример сортировки по возрастанию. То есть на начальной позиции в массиве должен стоять минимальный элемент, на следующей – больший или равный и т. д., на последнем месте должен стоять наибольший элемент.

Суть алгоритма такова. Во всём отыскиваем минимальный элемент, меняем его местами с начальным. Затем в оставшейся части массива (т. е. среди всех элементов кроме начального) снова отыскиваем минимальный элемент, меняем его местами уже со вторым элементом в массиве. И так далее (листинг 1.31).

Листинг 1.31

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

System.out.println("Введите количество элементов массива:");

Scanner sc = new Scanner(System.in);

int x = 0, a[];

if (sc.hasNextInt()) {

x = sc.nextInt();

}

a = new int[x];

for (int i = 0; i < a.length; i++) {

a[i] = (int) (Math.random() * 100 + 50);

}

System.out.println("Исходный массив:");

for (int i = 0; i < a.length; i++) {

System.out.println("mas[" + i + "]=" + a[i] + ";");

}

for (int i = 0; i < a.length; i++) {

/* Предполагаем, что начальный элемент рассматриваемого

* фрагмента и будет минимальным.

*/

int min = a[i]; // Предполагаемый минимальный элемент

int imin = i; // Индекс минимального элемента

/* Просматриваем оставшийся фрагмент массива и ищем там

* элемент, меньший предположенного минимума.

*/

for (int j = i + 1; j < a.length; j++) {

/* Если находим новый минимум, то запоминаем его индекс.

* И обновляем значение минимума.

*/

if (a[j] < min) {

min = a[j];

imin = j;

}

}

/* Проверяем, нашёлся ли элемент меньше, чем стоит на

* текущей позиции. Если нашёлся, то меняем элементы местами.

*/

if (i != imin) {

int temp = a[i];

a[i] = a[imin];

a[imin] = temp;

}

}

System.out.println("Отсортированный массив:");

for (int i = 0; i < a.length; i++) {

System.out.println("mas[" + i + "]=" + a[i] + ";");

}

}

}