2016-12-22 12 views
0

Я хочу, чтобы quicksort algoritm.I изучал алгоритм быстрой сортировки.Быстрая сортировка Java. ArrayIndexoutofBoundsException

Out: ArrayIndexoutofBoundsException error.I не удалось найти ошибку.

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

public class Quickort { 
static int partition(int arr[],int left,int right){ 
    int i=left; 
    int j=right; 
    int tmp;  
    int pivot=(left/right)/2; 
    while(i<=j){ 
     while(arr[i]<pivot) 
      i++; 
     while(arr[j]>pivot) 
      j--; 

     if(i<=j){ 
     tmp=arr[i]; 
     arr[i]=arr[j]; 
     arr[j]=tmp; 
     i++; 
     j--; 
     } 
    } 
    return i; 
} 
static void quicksort(int arr[],int left,int right){ 
int index=partition(arr,left,right); 

if(left<index-1) 
    quicksort(arr, left, index-1); 
if(index<right) 
quicksort(arr, index, right); 


} 


public static void main(String[] args) { 
    int [] arr={8,4,1,7,9,4,3,2,5}; 
    quicksort(arr,0,arr.length-1); 


} 

} 
+0

Пожалуйста, добавьте полную трассировку стека и отметьте линию, где происходит ошибка – Jens

+0

разрешенное. 'code' pivot = arr [(left + right)/2]; – myvalley

ответ

1

значение переменной поворота должно быть элементом из вашего массива (целое шарнирные = обр [вправо] ;).

Попробуйте это:

static int partition(int arr[], int left, int right) { 
    int pivot = arr[right]; 
    int i = left - 1; 
    int tmp; 
    for (int j = left; j <= right; j++) { 
     if (arr[j] <= pivot) { 
      i++; 
      tmp = arr[i]; 
      arr[i] = arr[j]; 
      arr[j] = tmp; 
     } 
    } 
    return i; 
} 

static void quicksort(int arr[], int left, int right) { 
    if(left < right){ 
     int index = partition(arr, left, right); 
     quicksort(arr, left, index - 1); 
     quicksort(arr, index + 1, right); 
    } 
} 
1

изменение int pivot=(left/right)/2; к int pivot=(left+right)/2;

+0

ı отредактирована, но все еще ошибка – myvalley

1

Согласно кода

int pivot=(left/right)/2; 

вы получите стержень как ноль. и из-за этого цикла

while(arr[j]>pivot) 
     j--; 

J становится -1 и, как массив не содержит этого, он бросает ArrayIndexOutOfBoundsException

+0

'j становится -1, и поскольку ваш массив не содержит этого' _as -1 находится ниже нижней границы 0 для любого массива Java_ – greybeard

+0

@greybeard, да, но когда вы вызываете любой массив с индексом -ve , то он выдает ошибку, как java.lang.ArrayIndexOutOfBoundsException: -1 – Rajashekhar

Смежные вопросы