Advertisement
darkor

AP_Lab_10

May 16th, 2020
277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.48 KB | None | 0 0
  1. package com.com;
  2.  
  3. class selectionSort {                                                  //Алгоритм вибором:
  4.     private void swap(int arr[], int i1, int i2) {
  5.         int temp = arr[i1];
  6.         arr[i1] = arr[i2];
  7.         arr[i2] = temp;
  8.     }
  9.  
  10.     public void sort(int arr[]) {
  11.         for (int i = 0; i < arr.length - 1; i++) {
  12.             int min_index = i;                                         //Крок 1: запам'ятовуємо позицію
  13.             int min_value = arr[i];                                    //і значення елементу і-того індекса в основному масиві
  14.             for (int j = i; j < arr.length; j++) {                     //Крок 2: звіряємо з усіми елементами в подальшому масиві
  15.                 if (min_value > arr[j]) {                              //Крок 3: якщо наш елемент, який ми запам'ятали, є більшим за інший подальший елемент
  16.                     min_index = j;                                     //тоді ми запам'ятовуємо менший елемент, а також його позицію(індекс). Повторюємо крок 3 до тих пір,
  17.                     min_value = arr[j];                                //поки не дійдемо кінця масиву
  18.                 }
  19.             }
  20.             swap(arr, min_index, i);                                   //Крок 4: після того, як знайшовся менший елемент за і-тий елемент основного масиву у кроці 3,
  21.         }                                                              //ми їх міняємо місцями. Продовжуємо алгоритм з кроку 1, поки не дійдемо кінця масиву.
  22.     }
  23.  
  24.     public selectionSort(int arr[]) {
  25.         sort(arr);
  26.     }
  27. }
  28.  
  29. class mergeSort {                                                      //Алгоритм злиття:
  30.     private void merge(int arr[], int leftSize, int middleSize, int rightSize) {
  31.         int i, j, k;
  32.         int num1 = middleSize - leftSize + 1;                          //Крок 1: знаходимо кіл-сть елментів лівого
  33.         int num2 = rightSize - middleSize;                             //і правого масиву
  34.         int[] arrLeft = new int[num1];                                 //Крок 2: створюємо масиви з відповідно знайденими кілкостями у кроці 1
  35.         int[] arrRight = new int[num2];
  36.         for (i = 0; i < num1; i++)                                     //Крок 3: заповнюємо масиви елементами
  37.             arrLeft[i] = arr[leftSize + i];
  38.         for (j = 0; j < num2; j++)
  39.             arrRight[j] = arr[middleSize + 1 + j];
  40.         i = 0;
  41.         j = 0;
  42.         k = leftSize;                                                  //Примітка: локальний перший елемент
  43.         while (i < num1 && j < num2) {                                 //Крок 4: починаємо заповнювати основний масив сортуючи елементи з створених масивів
  44.             if (arrLeft[i] <= arrRight[j]) {                           //у кроці 2 за такими принципами - якщо елемент лівого масиву є меншим за елемент правого масиву,
  45.                 arr[k] = arrLeft[i];                                   //тоді ми додаємо лівий елемент до основного масиву і переміщаємось на один елемент вперед
  46.                 i++;                                                   //в лівому масиві, якщо ж елемент лівого масиву є більшим за правий, тоді додаємо елемент правого
  47.             } else {                                                   //масиву у основний масив і переміщаємось на один елемент вперед в правому масиві.
  48.                 arr[k] = arrRight[j];                                  //Продовжуємо цей алгоритм до тих пір, поки ми не дійдемо кінця якого-небудь масиву.
  49.                 j++;
  50.             }
  51.             k++;                                                       //Примітка: кожен раз робимо крок вперед в основному масиві
  52.         }
  53.         while (i < num1) {                                             //Крок 5: якщо є якийсь залишок в правому або лівому масиві, тоді ми його записуємо у основний масив
  54.             arr[k] = arrLeft[i];
  55.             i++;
  56.             k++;
  57.         }
  58.         while (j < num2) {
  59.             arr[k] = arrRight[j];
  60.             j++;
  61.             k++;
  62.         }
  63.     }
  64.  
  65.     public void sort(int arr[], int leftSize, int rightSize) {
  66.         if (leftSize < rightSize) {                                    //Крок 2: продовжуємо крок перший, поки кількість елментів в масиві не стане 1 - переходимо на крок 3
  67.             int middleSize = leftSize + (rightSize - leftSize) / 2;    //Крок 1: ділимо масив на дві частини рекурсивно (масив ділиться умовно)
  68.             sort(arr, leftSize, middleSize);                           //- знайдемо центр масиву (кожен раз центр буде новий)
  69.             sort(arr, middleSize + 1, rightSize);
  70.             merge(arr, leftSize, middleSize, rightSize);               //Крок 3: далі сортуємо масив за алгоритмом (продовження алгоритму в методі "merge"
  71.         }                                                              // і кроки нумерються спочатку) рекурсивно
  72.     }
  73.  
  74.     public mergeSort(int arr[]) {
  75.         sort(arr, 0, arr.length - 1);
  76.     }
  77. }
  78.  
  79. class gnomeSort {                                                      //Алгоритм гнома:
  80.     private void swap(int arr[], int i1, int i2) {
  81.         int temp = arr[i1];
  82.         arr[i1] = arr[i2];
  83.         arr[i2] = temp;
  84.     }
  85.  
  86.     public void sort(int arr[]) {
  87.         int n = 0;
  88.         while (n < arr.length) {                                       //Крок 3: Повторюємо алгоримт з першого кроку, поки гноим не дійде кінця списку
  89.             if (n == 0)                                                //Крок 1: робимо один крок вперед, якщо ми на початковій позиції.
  90.                 n++;
  91.             if (arr[n] >= arr[n - 1])                                  //Крок 2: перевіряємо, чи минулий елемент менший за даний, якщо так - робимо крок вперед,
  92.                 n++;
  93.             else {                                                     //якщо ні - міняємо елементи місцями і робимо крок назад
  94.                 swap(arr, n, n - 1);
  95.                 n--;
  96.             }
  97.         }
  98.     }
  99.  
  100.     public gnomeSort(int arr[]) {
  101.         sort(arr);
  102.     }
  103. }
  104.  
  105. class cocktailShakerSort {                                             //Коктейльний алгоритм:
  106.     private void swap(int arr[], int i1, int i2) {
  107.         int temp = arr[i1];
  108.         arr[i1] = arr[i2];
  109.         arr[i2] = temp;
  110.     }
  111.  
  112.     public void sort(int arr[]) {
  113.         int max_index = arr.length;                                    //Примітка: права границя
  114.         int min_index = 0;                                             //Примітка: ліва границя
  115.         for (int i = 0; i < arr.length; i++) {
  116.             for (int j = i; j < max_index - 1; j++) {                  //Крок 1: проходимо по масиву від лівої границія до кінця правої границі,
  117.                 if (arr[j] > arr[j + 1])                               //якщо даний елемент є більшим за наступний - міняємо їх місцями
  118.                     swap(arr, j, j + 1);
  119.             }
  120.             --max_index;                                               //Крок 2: зменшуємо на одиницю праву границю
  121.             for (int j = max_index; j > min_index; j--) {              //Крок 3: проходимо по маисву від правої границі до початку лівої границі,
  122.                 if (arr[j] < arr[j - 1])                               //якщо данний елемент є більшим за попередній - міняємо їх місцями
  123.                     swap(arr, j, j - 1);
  124.             }
  125.             ++min_index;                                               //Крок 4: збільшуємо ліву границю
  126.         }                                                              //Крок 5: продовжуємо алгоритм починаючи з першого кроку доти,
  127.     }                                                                  //поки основний цикл не закінчить свою роботу
  128.  
  129.     public cocktailShakerSort(int arr[]) {
  130.         sort(arr);
  131.     }
  132. }
  133.  
  134. public class Main {
  135.  
  136.     public static void main(String[] args) {
  137. //        СОРТУВАННЯ ВИБОРОМ
  138.         int[] arr = {3, 23, 5, 3, 32, 32, 213, 234, 5, 2, 12, -123, -213, 213, 234, -2, -32, 8932, 23, -123, 0};
  139.         System.out.print("Сорутвання вибором до: ");
  140.         for (int i = 0; i < arr.length; i++)
  141.             System.out.print(arr[i] + " ");
  142.         System.out.println();
  143.  
  144.         selectionSort selectionSort = new selectionSort(arr);
  145.         System.out.print("Сорутвання вибором після: ");
  146.         for (int i = 0; i < arr.length; i++)
  147.             System.out.print(arr[i] + " ");
  148.         System.out.println();
  149.         System.out.println();
  150. //        СОРТУВАННЯ ВИБОРОМ
  151.  
  152. //        СОРТУВАННЯ ЗЛИТТЯМ
  153.         int[] arr1 = {32, 53, -23, 342, 134, 12, 423, 12, 43, -233, -23, -4532, -234, 0};
  154.         System.out.print("Сорутвання злиттям до: ");
  155.         for (int i = 0; i < arr1.length; i++)
  156.             System.out.print(arr1[i] + " ");
  157.         System.out.println();
  158.  
  159.         mergeSort mergeSort = new mergeSort(arr1);
  160.         System.out.print("Сорутвання злиттям після: ");
  161.         for (int i = 0; i < arr1.length; i++)
  162.             System.out.print(arr1[i] + " ");
  163.         System.out.println();
  164.         System.out.println();
  165. //        СОРТУВАННЯ ЗЛИТТЯМ
  166.  
  167. //        СОРТУВАННЯ ГНОМОМ
  168.         int[] arr2 = {32, 2345, 12, 123, 5432, -12, -45, -234, 213, 23, 123, 45, -324, -213, -123213, 0};
  169.         System.out.print("Сорутвання гномом до: ");
  170.         for (int i = 0; i < arr2.length; i++)
  171.             System.out.print(arr2[i] + " ");
  172.         System.out.println();
  173.  
  174.         gnomeSort gnomeSort = new gnomeSort(arr2);
  175.         System.out.print("Сорутвання гномом після: ");
  176.         for (int i = 0; i < arr2.length; i++)
  177.             System.out.print(arr2[i] + " ");
  178.         System.out.println();
  179.         System.out.println();
  180. //        СОРТУВАННЯ ГНОМОМ
  181.  
  182. //        КОКТЕЙЛЬНЕ СОРТУВАННЯ
  183.         int[] arr3 = {-32, -4233, -32, -213, 234, 234, 324, 21, 4, 873, 37, 84, -32, -3, -12, -3, -1, -2, 3, 5, 5, 0};
  184.         System.out.print("Коктейльним сортуванням до: ");
  185.         for (int i = 0; i < arr3.length; i++)
  186.             System.out.print(arr3[i] + " ");
  187.         System.out.println();
  188.  
  189.         cocktailShakerSort cocktailShakerSort = new cocktailShakerSort(arr3);
  190.         System.out.print("Коктейльним сортуванням після: ");
  191.         for (int i = 0; i < arr3.length; i++)
  192.             System.out.print(arr3[i] + " ");
  193.         System.out.println();
  194. //        КОКТЕЙЛЬНЕ СОРТУВАННЯ
  195.     }
  196. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement