Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Arrays;
- import static java.lang.System.arraycopy;
- public class MergeSort {
- int[] j;
- int[] k;
- public MergeSort(int[] a, int[] b){
- setA1(a);
- setA2(b);
- }
- public void setA1(int[] a1) {
- this.j = a1;
- }
- public void setA2(int[] a2) {
- this.k = a2;
- }
- public int[] getA1() {
- return j;
- }
- public int[] getA2() {
- return k;
- }
- public static int[] mergesort(int[] array1) {
- int[] buffer1 = Arrays.copyOf(array1, array1.length);
- int[] buffer2 = new int[array1.length];
- int[] result = mergesortInner(buffer1, buffer2, 0, array1.length);
- return result;
- }
- public static int[] mergesortInner(int[] buffer1, int[] buffer2,
- int startIndex, int endIndex) {
- if (startIndex >= endIndex - 1) {
- return buffer1;
- }
- // уже отсортирован.
- int middle = startIndex + (endIndex - startIndex) / 2;
- int[] sorted1 = mergesortInner(buffer1, buffer2, startIndex, middle);
- int[] sorted2 = mergesortInner(buffer1, buffer2, middle, endIndex);
- // Слияние
- int index1 = startIndex;
- int index2 = middle;
- int destIndex = startIndex;
- int[] result = sorted1 == buffer1 ? buffer2 : buffer1;
- while (index1 < middle && index2 < endIndex) {
- result[destIndex++] = sorted1[index1] > sorted2[index2]
- ? sorted1[index1++] : sorted2[index2++];
- }
- while (index1 < middle) {
- result[destIndex++] = sorted1[index1++];
- }
- while (index2 < endIndex) {
- result[destIndex++] = sorted2[index2++];
- }
- return result;
- }
- public int[] merge() {
- int[] a1 = this.j;
- int[] a2 = this.k;
- int[] a3 = new int[a1.length + a2.length];
- int i=0, j=0, k=0;
- while(i < a1.length && j < a2.length) {
- a3[k++] = a1[i] < a2[j] ? a1[i++] : a2[j++];
- }
- if(i< a1.length) {
- arraycopy(a1, i, a3, k, a1.length - i);
- } else if(j< a2.length) {
- arraycopy(a2, j, a3, k, a2.length - j);
- }
- return a3;
- }
- }
- /////////////////////////////////////////////////////////////////
- import java.util.Arrays;
- public class Mass {
- protected int[] array;
- public Mass(int[] array){
- setArray(array);
- }
- public void setArray(int[] array) {
- this.array = array;
- }
- public void sort(){
- System.out.println(Arrays.toString(array));
- for (int left = 0; left < array.length; left++) {
- int value = array[left];
- int i = left - 1;
- for (; i >= 0; i--) {
- if (value > array[i]) {
- array[i + 1] = array[i];
- } else {
- break;
- }
- }
- array[i + 1] = value;
- }
- System.out.println(Arrays.toString(array));
- }
- public int[] getArray() {
- return array;
- }
- }
- ////////////////////////////////////////////////////////////////////
- import java.util.*;
- public class Main {
- public static void main(String[] args){
- int[] a1 = new int[] {21, 23, 24, 40, 75, 76, 78, 77, 900, 2100, 2200, 2300, 2400, 2500};
- List<Integer> stud = new ArrayList<>();
- stud.add(3);
- stud.add(9);
- stud.add(5);
- stud.add(24);
- stud.add(64);
- stud.add(4);
- stud.add(34);
- System.out.println(stud.toString());
- Collections.sort(stud, new Comparator<Integer>() {
- @Override
- public int compare(Integer o1, Integer o2) {
- return o2 - o1;
- }
- });
- System.out.println(stud.toString());
- int[] b = new int[stud.size()];
- for ( int i = 0; i < stud.size(); i++ ) b[i] = stud.get(i);
- System.out.println(Arrays.toString(b));
- System.out.println(Arrays.toString(a1));
- MergeSort sorted = new MergeSort(b ,a1);
- int [] res = sorted.mergesort(sorted.merge());
- System.out.println( Arrays.toString(res));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement