Как напечатать функции массива в одном массиве? - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь реализовать функции сортировки слиянием, быстрой сортировки, двоичного поиска и поиска с интерполяцией.

Я уже выяснил две функции поиска, и мой код для методов сортировки слиянием и быстрой сортировки в основном завершен.Я думаю, что у меня есть проблема с моими утверждениями печати, потому что я только хочу, чтобы был напечатан окончательный массив.

Когда я запускаю код, я получаю сообщение о том, что он вышел за пределы, потому что каждый раз, когда вызывается метод, он также перепечатывает функцию.Я просто хочу, чтобы окончательные отсортированные массивы из обоих этих методов были напечатаны.

Мне просто нужно выяснить, как распечатать отсортированные массивы из этих двух методов в виде одного массива (для метода), который показывает отсортированные массивысписок.Я пытался преобразовать вызовы метода, чтобы вернуть значения и ввести их в массив, но я не уверен, что это можно сделать.

public static void merge_sort(int A[], int l, int r){

 if(l < r){
    int m = (l + r)/2;
    merge_sort(A, l, m);
    merge_sort(A, m + 1, r);
    merge(A, l, m, r);
  }
  System.out.println("Merge sorted array:" + Arrays.toString(A));
  }

  public static void merge(int A[], int l, int m, int r){


  int n1 = m - l + 1;
  int n2 = r - m;

  int L[] = new int [n1];
  int R[] = new int [n2];

  for(int i = 0; i < n1; i++){
     L[i] = A[l + i];
  }
  for(int j = 0; j < n2; j++){
     R[j] = A[m + 1 + j];
  }

 int i = 0;
 int j = 0;
 int k = 1;

  while(i < n1 && j < n2){
     if(L[i] <= R[j]){
        A[k] = L[i];
        i++;
     }
     else{
        A[k] = R[j];
        j++;
     }
     k++;
  }

  while(i < n1){
     A[k] = L[i];
     i++; 
     k++;
   }

   while(j < n2){
     A[k] = R[j];
     j++;
     k++;
   }
}

  public static void quick_sort(int A[], int l, int r){

 if(l < r){
   int i = partition(A, l, r);
   quick_sort(A, l, i - 1);
   quick_sort(A, i + 1, r);
 }
 System.out.println("Quick sort of Array: " + Arrays.toString(A));

   }
public static int partition(int A[], int l, int r){

int pivot = A[r];
int i = (l - 1);
for(int j = l; j < r; j++){
  if(A[j] <= pivot){
     i++;
     int temp = A[i];
     A[i] = A[j];
     A[j] = temp;
   }
 }

 int temp = A[i + 1];
 A[i + 1] = A[r];
 A[r] = temp;

 return i + 1;

   } 
    // this is the methods 
    // below is the portion of my main that calls the two sort functions
 int left = 0;
    int right = 14;
    int size = 15;
    //int[] quick = new int[15];
    //int[] merge = new int[15];
    quick_sort(intArray, left, right);
    merge_sort(intArray, left, right);

Я ожидаю, что вывод будет выглядеть как отсортированный массивэлементы как для сортировки слиянием, так и для методов быстрой сортировки.

1 Ответ

0 голосов
/ 17 февраля 2019

Не печатать внутри методов сортировки.

Пусть вызывающая сторона напечатает результат слияния.Речь идет о Разделение проблем , т. Е. Метод должен касаться только одной вещи.

В этом случае метод сортировки должен выполнять только сортировку, а не печать.Печать результата выходит за рамки того, что должен делать метод сортировки.

...