Sortierung zusammenführen, sortieren, indem ein zufälliges Array in zwei Hälften geteilt und dann in numerischer Reihenfolge platziert wird. Das Konzept heißt "Teile und herrsche". Die Ausgabe ist außer Betrieb und ich sehe nichts falsch mit diesem Code. Main gibt nur alle Zahlen im Array aus. Zu Ihrer Information, andere Teile des Codes sind nicht das Problem. Aber wenn du es brauchst, kann ich es dir geben.In Java mit "Divide and Conquer" sortieren
private void merge(int[] a, int first, int mid, int last)
{
int size = last - first + 1;
int [] temp = new int[size];
int i = first, j = mid + 1;
for(int s = 0; s < size; s++){ // a.length
if(i > mid){ // case a
temp[s] = a[j];
j++;
}else if(j > last){ // case b
temp[s] = a[i];
i++;
}else if(a[i] < a[j]){ // case c
temp[s] = a[i];
i++;
}else if(a[j] <= a[i]){ // case d
temp[s] = a[j];
j++;
}
}
for(int s = first; s < size; s++){
a[first] = temp[s - first];
}
}
public void mergeSort(int[] a, int first, int last)
{
int size = last - first + 1, mid;
if(size == 1){
steps++;
}else if(size == 2){
if(a[last] > a[first]){
int temp = a[last];
a[last] = a[first];
a[first] = temp;
steps += 3;
}
}else{
mid = (last + first)/2;
mergeSort(a, first, mid);
mergeSort(a, mid + 1, last);
merge(a, first, mid, last);
steps += 4;
}
}
Dies ist, was der Generator wie folgt aussieht:
private void fillArray(int numInts, int largestInt)
{
myArray = new int[numInts];
Random randGen = new Random();
for(int loop = 0; loop < myArray.length; loop++){
myArray[loop] = randGen.nextInt(largestInt) + 1;
}
}
Haben Sie versucht, einen Debugger zu verwenden? Sie werden sich bei solchen Fragen nicht immer auf SO verlassen können. –
@TimBiegeleisen Ja, ich habe einen Debugger benutzt. –
@StackOver - warum nicht die ifs ändern und von [] nach temp [] in merge() kopieren, um in der gewünschten Reihenfolge in temp zu sortieren, dann ändere die for-Schleife, um 'a [s] = temp [s] zu verwenden ; '? Der Code in mergesort() sortiert ein Unterarray der Größe 2 in absteigender Reihenfolge, während der Code in der Zusammenführung scheinbar in aufsteigender Reihenfolge sortiert wird. Sie müssen sie gleich machen (aufsteigend oder absteigend). – rcgldr