Advertisement
Toxotsist

T6.3 (Я ненавижу это задание)

Sep 23rd, 2021
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.27 KB | None | 0 0
  1. import java.util.Arrays;
  2.  
  3. import static java.lang.System.arraycopy;
  4.  
  5. public class MergeSort {
  6.     int[] j;
  7.     int[] k;
  8.  
  9.     public MergeSort(int[] a, int[] b){
  10.         setA1(a);
  11.         setA2(b);
  12.     }
  13.  
  14.     public void setA1(int[] a1) {
  15.         this.j = a1;
  16.     }
  17.  
  18.     public void setA2(int[] a2) {
  19.         this.k = a2;
  20.     }
  21.  
  22.     public int[] getA1() {
  23.         return j;
  24.     }
  25.  
  26.     public int[] getA2() {
  27.         return k;
  28.     }
  29.  
  30.     public static int[] mergesort(int[] array1) {
  31.         int[] buffer1 = Arrays.copyOf(array1, array1.length);
  32.         int[] buffer2 = new int[array1.length];
  33.         int[] result = mergesortInner(buffer1, buffer2, 0, array1.length);
  34.         return result;
  35.     }
  36.  
  37.     public static int[] mergesortInner(int[] buffer1, int[] buffer2,
  38.                                        int startIndex, int endIndex) {
  39.         if (startIndex >= endIndex - 1) {
  40.             return buffer1;
  41.         }
  42.  
  43.         // уже отсортирован.
  44.         int middle = startIndex + (endIndex - startIndex) / 2;
  45.         int[] sorted1 = mergesortInner(buffer1, buffer2, startIndex, middle);
  46.         int[] sorted2 = mergesortInner(buffer1, buffer2, middle, endIndex);
  47.  
  48.         // Слияние
  49.         int index1 = startIndex;
  50.         int index2 = middle;
  51.         int destIndex = startIndex;
  52.         int[] result = sorted1 == buffer1 ? buffer2 : buffer1;
  53.         while (index1 < middle && index2 < endIndex) {
  54.             result[destIndex++] = sorted1[index1] > sorted2[index2]
  55.                     ? sorted1[index1++] : sorted2[index2++];
  56.         }
  57.         while (index1 < middle) {
  58.             result[destIndex++] = sorted1[index1++];
  59.         }
  60.         while (index2 < endIndex) {
  61.             result[destIndex++] = sorted2[index2++];
  62.         }
  63.         return result;
  64.     }
  65.  
  66.     public int[] merge() {
  67.         int[] a1 = this.j;
  68.         int[] a2 = this.k;
  69.         int[] a3 = new int[a1.length + a2.length];
  70.         int i=0, j=0, k=0;
  71.         while(i < a1.length && j < a2.length) {
  72.             a3[k++] = a1[i] < a2[j] ? a1[i++] : a2[j++];
  73.         }
  74.         if(i< a1.length) {
  75.             arraycopy(a1, i, a3, k, a1.length - i);
  76.         } else if(j< a2.length) {
  77.             arraycopy(a2, j, a3, k, a2.length - j);
  78.         }
  79.  
  80.         return a3;
  81.     }
  82. }
  83. /////////////////////////////////////////////////////////////////
  84. import java.util.Arrays;
  85. public class Mass {
  86.     protected int[] array;
  87.  
  88.     public Mass(int[] array){
  89.         setArray(array);
  90.     }
  91.  
  92.     public void setArray(int[] array) {
  93.         this.array = array;
  94.     }
  95.  
  96.     public void sort(){
  97.         System.out.println(Arrays.toString(array));
  98.         for (int left = 0; left < array.length; left++) {
  99.             int value = array[left];
  100.             int i = left - 1;
  101.             for (; i >= 0; i--) {
  102.                 if (value > array[i]) {
  103.                     array[i + 1] = array[i];
  104.                 } else {
  105.                     break;
  106.                 }
  107.             }
  108.             array[i + 1] = value;
  109.         }
  110.         System.out.println(Arrays.toString(array));
  111.     }
  112.  
  113.  
  114.     public int[] getArray() {
  115.         return array;
  116.     }
  117. }
  118.  ////////////////////////////////////////////////////////////////////
  119. import java.util.*;
  120.  
  121. public class Main {
  122.     public static void main(String[] args){
  123.         int[] a1 = new int[] {21, 23, 24, 40, 75, 76, 78, 77, 900, 2100, 2200, 2300, 2400, 2500};
  124.         List<Integer> stud = new ArrayList<>();
  125.         stud.add(3);
  126.         stud.add(9);
  127.         stud.add(5);
  128.         stud.add(24);
  129.         stud.add(64);
  130.         stud.add(4);
  131.         stud.add(34);
  132.  
  133.         System.out.println(stud.toString());
  134.         Collections.sort(stud, new Comparator<Integer>() {
  135.  
  136.             @Override
  137.             public int compare(Integer o1, Integer o2) {
  138.                 return o2 - o1;
  139.             }
  140.         });
  141.         System.out.println(stud.toString());
  142.         int[] b = new int[stud.size()];
  143.  
  144.         for ( int i = 0; i < stud.size(); i++ ) b[i] = stud.get(i);
  145.  
  146.         System.out.println(Arrays.toString(b));
  147.         System.out.println(Arrays.toString(a1));
  148.         MergeSort sorted = new MergeSort(b ,a1);
  149.  
  150.         int [] res = sorted.mergesort(sorted.merge());
  151.         System.out.println( Arrays.toString(res));
  152.     }
  153. }
  154.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement