Boyan5

Merge Sort Topic 10

Dec 11th, 2020
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.77 KB | None | 0 0
  1. import java.util.Arrays;
  2. import java.util.Scanner;
  3.  
  4. public class Merge {
  5.     public static void main(String[] args) {
  6.         Scanner Input = new Scanner(System.in);
  7.         System.out.println("Input number of elements : ");
  8.         //int N = Input.nextInt();
  9.         int N = Integer.parseInt(Input.nextLine());
  10.         int[] arr = new int[N];
  11.  
  12.         for (int i = 0; i < N; i++) {
  13.  
  14.             System.out.println("Input element "+ i +": ");
  15.             arr[i] = Integer.parseInt(Input.nextLine());
  16.         }
  17.  
  18.         System.out.println("BEFORE MERGE SORT : " + Arrays.toString(arr));
  19.  
  20.         MergeSort_Methods.Sort(arr,0,arr.length-1);
  21.  
  22.         System.out.println("AFTER MERGE SORT : " + Arrays.toString(arr));
  23.  
  24.     }
  25. }
  26.  
  27. public class MergeSort_Methods {
  28.     public static void Sort(int[] ARR, int l, int r) {
  29.         if (l < r) {
  30.             int m = (l + r) / 2; // ОПРЕДЕЛЯМЕ СРЕДНАТА ТОЧКА ЗА РАЗДЕЛЯНЕ
  31.             Sort(ARR, l, m);// СОРТИРАМЕ ЛЕВИЯ
  32.             Sort(ARR, m + 1, r);// СОРТИРАМЕ ДЕСНИЯ
  33.             CompareAndMerge(ARR, l, m, r);// СЛИВАМЕ
  34.         }
  35.     }// end of sort
  36.  
  37.     // sort and merge
  38.     public static void  CompareAndMerge(int[] arr, int l, int m, int r) {
  39.         //дефинираме дължината на левия и десния масив
  40.         int LeftArrLength = m - l + 1;
  41.         int RightArrLength = r - m;
  42.         //дефинираме помощни масиви
  43.         int[] L = new int[LeftArrLength];
  44.         int[] R = new int[RightArrLength];
  45.  
  46.         for (int i = 0; i <LeftArrLength ; i++) {
  47.             L[i] = arr[l + i];
  48.         }
  49.         for (int j = 0; j < RightArrLength ; j++) {
  50.             R[j] = arr[m + 1 + j];
  51.         }
  52.         //сравняваме и обединяване на данните от помощните масиви
  53.         int i = 0;//начален индекс за левия масив
  54.         int j = 0;//начален индекс за десния масив
  55.         int k = l;//начален индекс за обединяващия масив
  56.  
  57.         while (i < LeftArrLength && j < RightArrLength){
  58.             if (L[i] <= R[j]){
  59.                 arr[k] = L[i];
  60.                 i++;
  61.             }else{
  62.                 arr[k] = R[j];
  63.                 j++;
  64.             }
  65.             k++;
  66.         }
  67.         //Записване на останалите елементи(ако има такива)
  68.         // във събитателния масив - arr
  69.         while (i < LeftArrLength){
  70.             arr[k] = L[i];
  71.             i++;
  72.             k++;
  73.         }
  74.         while (j < RightArrLength){
  75.             arr[k] = R[j];
  76.             j++;
  77.             k++;
  78.         }
  79.         }
  80.  
  81. }
  82.  
Advertisement
Add Comment
Please, Sign In to add comment