You are on page 1of 12

Мета роботи: вивчення існуючих алгоритмів сортування в Java.

Порядок виконання роботи:

1) Ознайомитися з теоретичним матеріалом.


2) Виконати практичні завдання на лабораторну роботу.
3) З метою перевірки отриманих навичок здати викладачеві лабораторну
роботу разом зі звітом про виконану роботу.

Завдання 1. Array метод

Код програми:
package сортировка;
import java.util.Arrays;
public class Массив_1
{
public static void main(String[] args)
{
int[] array = {1, 2, 3, 4, 5, 0};
//Array method
2

Arrays.sort(array);
System.out.print(Arrays.toString(array));
}
}
Результат:
[0, 1, 2, 3, 4, 5]

Завдання 2. Метод бульбашки

Код програми:
package сортировка;
import java.util.Arrays;
public class Массив_2
{
public static void main(String[] args)
{
int[] array = {1, 2, 3, 4, 5, 0};
for (int b = 0; b < array.length; b++) {
for (int i = 0; i < array.length - 1; i++) {
if (array[i] > array[i+1]) {
3

int temp = array[i];


array[i] = array[i+1];
array[i+1] = temp;
}
}
}
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
}
Результат:
012345

Завдання 3. Метод вибору


4

Код програми:
package сортировка;
public class МетодВибору
{
public static void main(String[] args)
{
int[] array = {1, 3, 4, 2, 5, 0};
for (int i = 0; i < array.length - 1; i++) {
int min = i;
for (int j = i; j < array.length; j++) {
if (array[min] < array[j]) {
min = j;
}
}
int temp = array[i];
array[i] = array[min];
array[min] = temp;
}
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
}
Результат:
543210
5

Завдання 4. Сортування вставками (Insertion sort)


Створимо масив, в якому після завершення алгоритму буде лежати
відповідь. Будемо по черзі вставляти елементи з вихідного масиву так, щоб
елементи в масиві-відповіді завжди були відсортовані. Відсортований буде
деякий префікс вихідного масиву, замість вставки будемо міняти поточний
елемент з попереднім, поки вони стоять в неправильному порядку.

Код програми:
package сортировка;
import java.util.Arrays;
public class InsertSort
{
public static void main(String[] args)
{
int[] array = {10,20,50,5,100,80,1000,0,300,200};
for (int i = 1; i < array.length; i++)
{
int current = array[i];
6

int j = i - 1;
while(j >= 0 && current < array[j]) {
array[j+1] = array[j];
j--;
}
// в этой точке мы вышли, так что j так же -1
// или в первом элементе, где текущий >= a[j]
array[j+1] = current;
}
System.out.println(Arrays.toString(array));
}
}
Результат:
[0, 5, 10, 20, 50, 80, 100, 200, 300, 1000]

Завдання 5. Сортування Шелла (Shellsort)


Використовуємо ту ж ідею, що і сортування з гребінцем (фіксуємо і йдемо
зліва направо, порівнюючи елементи, які стоять на цій відстані, переставляючи
їх, якщо необхідно. Коли відстань дорівнюватиме одиниці, виконується
сортування бульбашкою), і застосуємо до сортування вставками. Зафіксуємо
деяку відстань. Тоді елементи масиву розіб'ються на класи - в один клас
потрапляють елементи, відстань між якими є кратними зафіксованій відстані.
Відсортуємо сортуванням вставками кожен клас. На відміну від сортування
гребінцем, невідомий оптимальний набір відстаней. Послідовність Шелла -
перший елемент дорівнює довжині масиву, кожен наступний вдвічі менше
попереднього.
7

Код програми:
package сортировка;
import java.util.Arrays;
public class ShellSort
{
public static void main(String[] args)
{
int[] array = {10,20,50,5,100,80,1000,0,300,200};
int n = array.length;
int i, j, step;
int tmp;
for (step = n / 2; step > 0; step /= 2) {
for (i = step; i < n; i++) {
tmp = array[i];
for (j = i; j >= step; j -= step) {
8

if (tmp < array[j - step])


array[j] = array[j - step];
else
break;
}
array[j] = tmp;
}
}
System.out.println(Arrays.toString(array));
}
}
Результат:
[0, 5, 10, 20, 50, 80, 100, 200, 300, 1000]

Завдання 6. Шейкерне сортування (Shaker sort або також відоме як сортування


перемішуванням і коктейльне сортування)
Зауважимо, що сортування бульбашкою працює повільно на тестах, в яких
маленькі елементи стоять в кінці (їх ще називають «черепахами»). Такий
елемент на кожному кроці алгоритму буде зрушуватися всього на одну позицію
вліво. Тому будемо йти не тільки зліва направо, а й справа наліво.
9

Код програми:
package сортировка;
import java.util.Arrays;
public class CocktailSort
{
public static void main(String[] args)
{
int[] array = {10,20,50,5,100,80,1000,0,300,200};
int left = 0;
int right = array.length - 1;
int temp;
while (left < right) {
for (int i = left; i < right; i++) {
if (array[i] > array[i + 1]) {
temp = array[i];
10

array[i] = array[i+1];
array[i+1] = temp;
}
}
right--;
for (int i = right; i > left; i--) {
if (array[i] < array[i - 1]) {
temp = array[i];
array[i] = array[i - 1];
array[i - 1] = temp;
}
}
left++;
}
System.out.println(Arrays.toString(array));
}
}
Результат:
[0, 5, 10, 20, 50, 80, 100, 200, 300, 1000]

Завдання 7. Приклад введення елементів масиву з консолі


11

Код програми:
package сортировка;
import java.util.Scanner;
import java.util.Arrays;
public class Массив_1_Ввод
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int array[];
int counter;
int num = in.nextInt();
array = new int[num];
System.out.print("Input " + num + " numbers");
for (counter = 0; counter < num; counter++)
{
12

array[counter] = in.nextInt();
}
}
}
Результат:
5
Input 5 numbers
6
1
10
-67
4

You might also like