小弟刚学JAVA不久,最近弄个快速排序法写了一天还是调试不出来,不知道错在哪,请各位大哥帮忙指点指点。
public class Sort {
int[] a;
public Sort(int[] a){
this.a=a;
}
  private void quickSort(int left, int right) {
      int i = left;
      int j = right;
      int t =a[0];
      while(true){
        while(a[j]>t){
         j--;
        }
            swap(a[i], a[j]);    
        while(a[i]<t && i<j){
         i++;
        }
         swap(a[i], a[j]); 
        if(i>=j) break;                 
      }
      if(left<i-1)
      quickSort(left, i-1);
      if(i+1<right)
      quickSort(i+1, right);     
    }
  private void swap(int loc1, int loc2) {
    int tmp = loc1;
    loc1=loc2;
    loc2=tmp;
  }
  public static void main(String[] args){
   int[] a ={58,45,61,71,13,53,78};
   Sort s = new Sort(a);
    s.quickSort(0,6);
   for(int i=0;i<7;i++)
   System.out.println(a[i]);
  }
}

解决方案 »

  1.   

    // quickSort3.java
    // demonstrates quick sort; uses insertion sort for cleanup
    // to run this program: C>java QuickSort3App
    ////////////////////////////////////////////////////////////////
    class ArrayIns
       {
       private long[] theArray;          // ref to array theArray
       private int nElems;               // number of data items
    //--------------------------------------------------------------
       public ArrayIns(int max)          // constructor
          {
          theArray = new long[max];      // create the array
          nElems = 0;                    // no items yet
          }
    //--------------------------------------------------------------
       public void insert(long value)    // put element into array
          {
          theArray[nElems] = value;      // insert it
          nElems++;                      // increment size
          }
    //--------------------------------------------------------------
       public void display()             // displays array contents
          {
          System.out.print("A=");
          for(int j=0; j<nElems; j++)    // for each element,
             System.out.print(theArray[j] + " ");  // display it
          System.out.println("");
          }
    //--------------------------------------------------------------
       public void quickSort()
          {
          recQuickSort(0, nElems-1);
          // insertionSort(0, nElems-1); // the other option
          }
    //--------------------------------------------------------------
       public void recQuickSort(int left, int right)
          {
          int size = right-left+1;
          if(size < 10)                   // insertion sort if small
             insertionSort(left, right);
          else                            // quicksort if large
             {
             long median = medianOf3(left, right);
             int partition = partitionIt(left, right, median);
             recQuickSort(left, partition-1);
             recQuickSort(partition+1, right);
             }
          }  // end recQuickSort()
    //--------------------------------------------------------------
       public long medianOf3(int left, int right)
          {
          int center = (left+right)/2;
                                           // order left & center
          if( theArray[left] > theArray[center] )
             swap(left, center);
                                           // order left & right
          if( theArray[left] > theArray[right] )
             swap(left, right);
                                           // order center & right
          if( theArray[center] > theArray[right] )
             swap(center, right);      swap(center, right-1);           // put pivot on right
          return theArray[right-1];        // return median value
          }  // end medianOf3()
    //--------------------------------------------------------------
       public void swap(int dex1, int dex2)  // swap two elements
          {
          long temp = theArray[dex1];        // A into temp
          theArray[dex1] = theArray[dex2];   // B into A
          theArray[dex2] = temp;             // temp into B
          }  // end swap(
    //--------------------------------------------------------------
        public int partitionIt(int left, int right, long pivot)
           {
           int leftPtr = left;             // right of first elem
           int rightPtr = right - 1;       // left of pivot
           while(true)
              {
              while( theArray[++leftPtr] < pivot )  // find bigger
                 ;                                  // (nop)
              while( theArray[--rightPtr] > pivot ) // find smaller
                 ;                                  // (nop)
              if(leftPtr >= rightPtr)      // if pointers cross,
                 break;                    //    partition done
              else                         // not crossed, so
                 swap(leftPtr, rightPtr);  // swap elements
              }  // end while(true)
           swap(leftPtr, right-1);         // restore pivot
           return leftPtr;                 // return pivot location
           }  // end partitionIt()
    //--------------------------------------------------------------
                                           // insertion sort
       public void insertionSort(int left, int right)
          {
          int in, out;
                                           //  sorted on left of out
          for(out=left+1; out<=right; out++)
             {
             long temp = theArray[out];    // remove ed item
             in = out;                     // start shifts at out
                                           // until one is smaller,
             while(in>left && theArray[in-1] >= temp)
                {
                theArray[in] = theArray[in-1]; // shift item to right
                --in;                      // go left one position
                }
             theArray[in] = temp;          // insert ed item
             }  // end for
          }  // end insertionSort()
    //--------------------------------------------------------------
       }  // end class ArrayIns
    ////////////////////////////////////////////////////////////////
    class QuickSort3App
       {
       public static void main(String[] args)
          {
          int maxSize = 16;             // array size
          ArrayIns arr;                 // reference to array
          arr = new ArrayIns(maxSize);  // create the array      for(int j=0; j<maxSize; j++)  // fill array with
             {                          // random numbers
             long n = (int)(java.lang.Math.random()*99);
             arr.insert(n);
             }
          arr.display();                // display items
          arr.quickSort();              // quicksort them
          arr.display();                // display them again
          }  // end main()
       }  // end class QuickSort3App
    ////////////////////////////////////////////////////////////////