2016-02-06 55 views
-2

快速排序Java實現 - 我已經做了一個程序來實現QuickSort算法,但它沒有正確顯示排序的序列,它也顯示出數組超出界限的Index異常。有人能說出代碼或邏輯有什麼問題嗎?QuickSort算法錯誤

import java.util.*; 

public class QuickSort{ 
    int num,arrayQS[],i; 

    public void quicksort(int ar[],int start,int end){ 
     if(start<end){ 
      int pindex=partition(ar,start,end); 
      System.out.println(pindex); 
      quicksort(ar,start,pindex-1); 
      quicksort(ar,pindex+1,end); 
     } 
    } 
    public int partition(int pAR[],int start, int end){ //partition function 

     int key; 
     int swapper; 
     int pivot=pAR[end]; 
     int pIndex=start; 
     for(i=0;i<end;i++){ 
      if(pAR[i]<=pivot){ 
       //swapiing 
       key=pAR[pIndex]; 
       pAR[pIndex]=pAR[i]; 
       pAR[i]=key; 
       pIndex++; 
      } 
     } 
     //swap 
     swapper=pAR[pIndex]; 
     pAR[pIndex]=pAR[end]; 
     pAR[end]=swapper; 
     return pIndex; 
    } 
    public void arrayInputFn(){ 
     Scanner in=new Scanner(System.in); 
     System.out.println("enter the number you want to insert in an array"); 
     num=in.nextInt(); 
     arrayQS=new int[num]; 
     System.out.println("enter the elements in an array: "); 
     for(i=0;i<num;i++){ 
      arrayQS[i]=in.nextInt(); 
     } 
     quicksort(arrayQS,0,arrayQS.length-1); 

     for(i=0;i<arrayQS.length;i++){ 
      System.out.print(arrayQS[i]); 
     } 
    } 
    public static void main(String[] args){ 
     QuickSort qs=new QuickSort(); 
     qs.arrayInputFn(); 
    } 
} 
+2

使用調試器找出發生了什麼 – Jens

回答

0

for(i=0;i<end;i++){開始指數應start,不0。您將整個數組傳遞給方法,但您只能按照startend的規定一次對其中的一部分進行分類(除第一次調用之外)。

您還應該提取交換方法以使代碼更簡潔。

public int partition(int pAR[], int start, int end) { 
    int pivot = pAR[end]; 
    int pIndex = start; 
    for (i = start; i < end; i++) { 
     if (pAR[i] <= pivot) { 
      swap(pAR, i, pIndex); 
      pIndex++; 
     } 
    } 
    swap(pAR, pIndex, end); 
    return pIndex; 
} 

public void swap(int[] arr, int a, int b) { 
    int temp = arr[a]; 
    arr[a] = arr[b]; 
    arr[b] = temp; 
}