Mergesort

main
mail 2026-04-01 09:49:33 +02:00
parent df9946e2ad
commit 824bc188db
1 changed files with 54 additions and 8 deletions

View File

@ -1,4 +1,5 @@
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.ArrayList;
import java.util.logging.Level; import java.util.logging.Level;
public class SortAlgo { public class SortAlgo {
@ -29,11 +30,6 @@ public class SortAlgo {
System.out.println(); System.out.println();
int[] erg4 = mergesort(insert);
for (int i = 0; i < erg4.length;i++)
System.out.print(erg4[i] + " ");
System.out.println();
} }
@ -92,9 +88,59 @@ public class SortAlgo {
return arr; return arr;
} }
public static int[] mergesort (int[] arr) { // O(n*log2(n)) public class Mergesort {
private static final Logger log = Logger.getLogger(Mergesort.class.getName());
return arr; private int forcounts = 0;
public int[] sort(int[] arr) {
if(arr.length == 0) {
return new int[0];
}
int[] sorted = new int[arr.length];
ArrayList<Integer[]> subArrays = new ArrayList<Integer[]>();
for(int i = 0; i < arr.length; i++) {
subArrays.add(new Integer[] {arr[i]});
}
while(subArrays.size() > 1) {
ArrayList<Integer[]> newSubArrays = new ArrayList<Integer[]>();
for(int i = 0; i<subArrays.size(); i=i+2) {
if(i+1 < subArrays.size()) {
newSubArrays.add(mergeTwoSubArrays(subArrays.get(i),subArrays.get(i+1)));
} else {
newSubArrays.add(subArrays.get(i));
}
}
subArrays = newSubArrays;
}
for(int i = 0; i<subArrays.get(0).length; i++) {
sorted[i] = subArrays.get(0)[i];
}
log.log(Level.INFO, "Mergesort: " + forcounts);
return sorted;
}
private Integer[] mergeTwoSubArrays(Integer[] arr1, Integer[] arr2) {
if(arr1.length == 0) {
return arr2;
}
if(arr2.length == 0) {
return arr1;
}
Integer[] ret = new Integer[arr1.length+arr2.length];
int index1 = 0;
int index2 = 0;
for(int i = 0; i < arr1.length+arr2.length; i++) {
forcounts++;
if(index1 >= arr1.length) {
ret[i] = arr2[index2++];
} else if(index2 >= arr2.length) {
ret[i] = arr1[index1++];
} else if(arr1[index1] <= arr2[index2]) {
ret[i] = arr1[index1++];
} else {
ret[i] = arr2[index2++];
}
}
return ret;
}
} }