2016-02-17 2 views
0

Ниже приведен код, который я написал для рандомизированной быстрой сортировки. Когда я запускаю код я получаю ArrayIndexOutOfBoundException.Can кто-то пожалуйста, скажите мне, где я сделал mistake.Exception в теме «главный»рандомизированный quicksort с использованием jav

java.lang.ArrayIndexOutOfBoundsException: -1 
    at randompartition.partition(randompartition.java:21) 
    at randompartition.quicksort(randompartition.java:37) 
    at randompartition.quicksort(randompartition.java:38) 
    at randompartition.quicksort(randompartition.java:38) 
    at randompartition.main(randompartition.java:59) 
import java.util.Random; 
import java.util.Scanner; 

public class randompartition { 
    static randompartition r =new randompartition(); 
    private Scanner s; 

    void exchange(int a,int b){ 
     int temp; 
     temp=a; 
     a=b; 
     b=temp; 
    } 

    int random(int start,int end) { 
     Random rn=new Random(); 
     int pindex=rn.nextInt(end-start+1); 
     return pindex; 
    } 

    int partition(int A[],int start,int end){ 
     int pivot=A[end-1]; 
     int pindex=r.random(start, end-1); 
     r.exchange(A[pindex], A[end-1]); 

     for(int i=0;i<end;i++){ 
      if (A[i]<=pivot) { 
       pindex=pindex+1; 
       r.exchange(A[pindex],A[i]); 
      } 
     } 
     r.exchange(A[pindex],A[end-1]); 
     return pindex; 
    } 

    void quicksort(int A[],int start,int end){ 
     if(start<end){ 
      int pindex=r.partition(A, start, end-1); 
      r.quicksort(A,start,pindex-1); 
      r.quicksort(A, pindex+1, end-1); 
     } 
    } 

    int [] createarray() { 
     int i; 
     s = new Scanner(System.in); 
     System.out.println("enter size of array"); 
     int n=s.nextInt(); 
     int A[]=new int[n]; 
     System.out.println("enter array elements"); 
     int end=A.length; 
     for(i=0;i<end;i++){ 
      A[i]=s.nextInt(); 
     } 
     return A; 
    } 

    public static void main(String[] args) { 
     int []A=r.createarray(); 
     int end=A.length; 

     r.quicksort(A,0,end-1); 
     for(int i=0;i<A.length;i++){ 
      System.out.println(A[i]); 
     } 
    } 
} 
+1

И какая строка кода является ошибкой, о которой жалуется, - номера строк в представленном коде отсутствуют. – pczeus

+1

Вы пробовали переходить через ваш код с помощью отладчика и наблюдать за значениями ваших переменных? –

ответ

-1

изменение вашей линии 63 в

r.quicksort(A,0,end); 

существующий код работает для нечетного размера, но это приведет к краху для четного размера из-за вашего секционирования (имеет отношение к вашей линии 22)

изменение конца-1 до конца будет разрешать это