Алгоритм сортировки слиянием в java
- Привет!
Я хочу отсортировать массив с помощью алгоритма сортировки слиянием. Я написал треску, кажется, все в порядке в моем коде, но полученный массив не отсортирован должным образом. Я собираюсь поставить ниже свой код. В результате массив
[2, 55, 22, 22, 44, 66, 33, 77]
Заранее спасибо.
Что я уже пробовал:
import java.util.Arrays; /* Write a function that sorts an array of numbers using merge sort. */ public class BonusExtraExercise11 { public static void main(String[] args) { int[] unsortedArray = {2, 55, 44, 22, 77,66,33,22}; String sortedArray = Arrays.toString(DivideArray(unsortedArray)); System.out.println(sortedArray); } public static int [] DivideArray(int[] unsortedArray) { // We create two sub-arrays. We give them the value 0. It is going to be changed when we find out if the array // is even or odd. if(unsortedArray.length == 1) { return unsortedArray; //Array is a single element. } int [] leftSide = new int[0]; int [] rightSide = new int[0]; int [] sortedArray; // We find out if the array is even or odd.. int middle = unsortedArray.length / 2; int remainder = unsortedArray.length % 2; // If the array is even the length of the sub-arrays will get the value of the variable "middle". if(remainder == 0){ leftSide = new int[middle]; rightSide = new int[middle]; } //If the array is odd than the array leftSide will get the length of the variable middle //and the rightSide is going to get the value of the variable middle +1. if(remainder == 1) { leftSide = new int[middle]; rightSide = new int[middle+1]; } //populate leftside for(int i=0; i<leftSide.length; i++) { leftSide[i] = unsortedArray[i]; } //populate right side int n=0; for(int j=middle; j<unsortedArray.length; j++) { rightSide[n] = unsortedArray[j]; n++; } leftSide = DivideArray(leftSide); rightSide = DivideArray(rightSide); sortedArray=Merge(leftSide, rightSide); return sortedArray; } public static int [] Merge(int [] leftSide, int [] rightSide) { int lengthSortedArray = leftSide.length+rightSide.length; int [] sortedArray = new int[lengthSortedArray]; int indexL = 0; int indexR = 0; int indexSortArr = 0; while(indexL<leftSide.length || indexR<rightSide.length) { if(indexL<leftSide.length && indexR<rightSide.length) { if(leftSide[indexL]<=rightSide[indexR]) { sortedArray[indexSortArr++] = leftSide[indexL++]; } else { sortedArray[indexSortArr++] = rightSide[indexR++]; } } if(indexL<leftSide.length) { sortedArray[indexSortArr++] = leftSide[indexL++]; } if(indexR<rightSide.length) { sortedArray[indexSortArr++] = rightSide[indexR++]; } } return sortedArray; } }