Hallo,
ich versuche gerade einen Mergesort Algorithmus in der Implementierung zu verstehen. Ein Teil des Codes war vorgegeben und daher verstehe ich ihn nicht so ganz. In der merge-Methode verstehe ich die dritte while-Schleife einfach nicht. In der ersten while-Schleife wird ein Hilfsarray b gefüllt mit den Werten des Arrays, die sich links der Mitte befinden. In der zweiten wird das Hilfsarray verglichen mit den Werten rechts des Arrays.
In der dritten while-Schleife (while (k<j)...)komme ich jedoch nicht weiter und wollte daher fragen, ob mir da jemand erklären kann, was dort gemacht wird und was der Sinn dieser Schleife ist.
[CODE lang="java" title="Mergesort"]public class MergeSort {
private int []a = {1,8,7,9,6,5,3,2,4};
public MergeSort(){
mergesort(0,a.length-1);
this.Ausgeben();
}
public void mergesort(int links, int rechts)
{
if (links<rechts){
int m= (links+rechts)/2;//m steht für die Mitte des Arrays
mergesort(links, m);// Hier wird die linke Hälfte des Arrays in einzelne Elemente aufgeteilt
mergesort(m+1,rechts);// Hier wird die rechte Hälfte des Arrays in einzelne Elemente aufgeteilt
merge(links,m,rechts);
}
}
public void merge(int links, int mitte, int rechts){
int i, j ,k;
i = 0;
j = links;
int []b = new int[mitte-links+1];//soll ein Hilfsarray sein
while(j <= mitte){
//Die while-Schleife soll das Hilfsarray füllen mit Werten, die links von der Mitte stehen
b=a[j];
i++;
j++;
}
i = 0;
k = links;
while(k < j && j <= rechts){
//Die Zahlen links der Mitte und die Zahlen rechts der Mitte werden miteinnder verglichen.
if(b <= a[j]){
a[k]=b;
//a[k] ist das "Gesamtarray"
k++;
i++;
}else{
a[k]=a[j];
k++;
j++;
}
}
while(k < j){
a[k]=b;
k++;
i++;
}
}
public void Ausgeben(){
for (int i=0;i<a.length;i++)
System.out.print(a);
System.out.println("");
}
}[/CODE]
ich versuche gerade einen Mergesort Algorithmus in der Implementierung zu verstehen. Ein Teil des Codes war vorgegeben und daher verstehe ich ihn nicht so ganz. In der merge-Methode verstehe ich die dritte while-Schleife einfach nicht. In der ersten while-Schleife wird ein Hilfsarray b gefüllt mit den Werten des Arrays, die sich links der Mitte befinden. In der zweiten wird das Hilfsarray verglichen mit den Werten rechts des Arrays.
In der dritten while-Schleife (while (k<j)...)komme ich jedoch nicht weiter und wollte daher fragen, ob mir da jemand erklären kann, was dort gemacht wird und was der Sinn dieser Schleife ist.
[CODE lang="java" title="Mergesort"]public class MergeSort {
private int []a = {1,8,7,9,6,5,3,2,4};
public MergeSort(){
mergesort(0,a.length-1);
this.Ausgeben();
}
public void mergesort(int links, int rechts)
{
if (links<rechts){
int m= (links+rechts)/2;//m steht für die Mitte des Arrays
mergesort(links, m);// Hier wird die linke Hälfte des Arrays in einzelne Elemente aufgeteilt
mergesort(m+1,rechts);// Hier wird die rechte Hälfte des Arrays in einzelne Elemente aufgeteilt
merge(links,m,rechts);
}
}
public void merge(int links, int mitte, int rechts){
int i, j ,k;
i = 0;
j = links;
int []b = new int[mitte-links+1];//soll ein Hilfsarray sein
while(j <= mitte){
//Die while-Schleife soll das Hilfsarray füllen mit Werten, die links von der Mitte stehen
b=a[j];
i++;
j++;
}
i = 0;
k = links;
while(k < j && j <= rechts){
//Die Zahlen links der Mitte und die Zahlen rechts der Mitte werden miteinnder verglichen.
if(b <= a[j]){
a[k]=b;
//a[k] ist das "Gesamtarray"
k++;
i++;
}else{
a[k]=a[j];
k++;
j++;
}
}
while(k < j){
a[k]=b;
k++;
i++;
}
}
public void Ausgeben(){
for (int i=0;i<a.length;i++)
System.out.print(a);
System.out.println("");
}
}[/CODE]