Объединить сортировку, сортируя, разделив случайный массив пополам и затем поместив их в числовой порядок. Концепция называется «Разделить и покорить». Выход не работает, и я не вижу ничего плохого в этом коде. Main просто выводит все числа в массиве. FYI, другие части кода не проблема. Но если вам это нужно, я могу отдать его вам.Сортировка на Java с «Разделить и покорить»
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;
}
}
Это то, что генератор выглядит следующим образом:
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;
}
}
Вы пытались использовать отладчик? Вы не всегда сможете рассчитывать на SO для таких вопросов. –
@TimBiegeleisen Да, я использовал отладчик. –
@StackOver - почему бы не изменить if и копии с [] на temp [] в merge() для сортировки в том порядке, в котором вы хотите установить temp, а затем изменить цикл for, чтобы использовать 'a [s] = temp [s] ; '? Код в mergesort() сортирует подматрицу размером 2 в порядке убывания, тогда как кажется, что код в слиянии сортируется в порядке возрастания. Вы должны сделать их одинаковыми (как по восходящему, так и по нисходящему). – rcgldr