быстрая сортировка массива целочисленных массивов - PullRequest
3 голосов
/ 22 июля 2011

Мне нужно отсортировать массив целочисленных массивов для решения домашней задачи в одном из моих классов.Кажется, я получаю StackOverFlowError почти каждый раз.Мой массив это list2 [10] [10].Моя быстрая сортировка разделена на 3 метода.quickSort1 (int, int) является основной функцией, раздел сравнивает новый раздел, а swap просто меняет целочисленные массивы на list2 [i] и list2 [j].метод сравнения (int a, int b) возвращает 1, если list2 [a] меньше list2 [b] - 1, если b меньше a, и 100, если они равны.

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

public static int partition(int low, int high)
{
      int i = low, j = high;
      int pivot = (low+high)/2;
          System.out.println(i + " " + j + " " + pivot);
      while (i <= j) {
            while (compare(i, pivot) > 0)
                  i++;
            while (compare(pivot, j) > 0)
                  j--;
            if (i < j) {
                  swap(i,j);
                  i++;
                  j--;
            }
                if (i == pivot && i == j-1)
                {
                    return i;
                }
                if (j == pivot && j-1 == i)
                {
                    return i;
                }
      }

      return i;
}

public static void quickSort1(int low, int high) {
        System.out.println("Recursion: " + recursions);
        int i = partition(low, high);
        System.out.println(i);
        if (low < i -1)
        {
            recursions++;
            quickSort1(low, i -1);
        }
        if (i < high-1)
        {
            recursions++;
            quickSort1(i, high);
        }


}

public static void swap( int i, int j)
{
    int[] temp = new int[n];

    for(int k = 0; k < n; k++) {
    temp[k] = list2[i][k];
    }
    for(int k = 0; k < n; k++) {
    list2[i][k] = list2[j][k];  
    }
    for(int k = 0; k < n; k++) {
    list2[j][k] = temp[k];
    }

}

Ответы [ 2 ]

1 голос
/ 15 апреля 2013

Я не думаю, что эти строки необходимы внутри цикла while(i <= j):

if (i == pivot && i == j-1)
{
    return i;
}
if (j == pivot && j-1 == i)
{
    return i;
}

Попробуйте удалить их из кода.

0 голосов
/ 21 апреля 2014

import java.util.Arrays; import java.util.Scanner;

яблоки общественного класса {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter the number of the values");
    int num = input.nextInt();
    int a[] = new int [num];
    System.out.println("Enter the nambers now");
    for(int i=0; i<a.length; i++){
        a[i] = input.nextInt();
    }
    Arrays.sort(a);
 int min =a[0];
System.out.println("The minmum value is    "+min);
int max= a[a.length-1];
System.out.println("The maxemum value is   "+max);
int d = max-min;
System.out.println("the difrentc between the max and the min is "+  d);

    System.out.println("The Arrays R \t");
    for(int g=0; g<=a.length;g++){
        int m = a[g];
        System.out.println(m);
    }







}

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...