Javaのクイックソート


アルゴリズムの導論の中の偽コードに基づいて書いた
最初にネットで探した例はすべて問題があって、なぜか、すべて私を気絶させました
そして偽のコードを押して書いても、間違いがあって、本当に憂鬱です.
そして全部削除して何度も書き直して、いきなり書いてしまいました
主な難点はpartition関数,中のiとjの関係であり,それらの値はいつ交換されるかである.
長い間データ構造を考えていなかったのかもしれません
だから今日はこれを作るのに多くの時間を費やしました

package cn.qs.util;

public class SortUtil {

	/**
	 *      
	 *          :(       )
	 *         ,    ,            
	 *     a[p:r]
	 * 1)  (        ): a[p]          a[p:q-1]、a[q]、a[q+1:r]  a[p:q-1]           a[q],a[q+1:r]           a[q].
	 * 2)    :          ,    a[p:q-1] a[q+1:r]   。 
	 * @param Array   ,       
	 * @param p         
	 * @param r         
	 */
	public void quickSort(int[] Array, int p, int r){  
		   if(p < r){  
		      int q = partition(Array, p, r);
		      //    
		      quickSort(Array, p, q - 1);  
		      quickSort(Array, q + 1, r);  
		   }  
		}  
		  
	public int partition(int[] Array, int p, int r){  
		   int x = Array[r];//     ,         
		   int i = p - 1;
		   for(int j= p; j <= r - 1; j++){  
			if(Array[j] <= x){ 
		         i++;  
		         //           
		         this.swap(i, j, Array); 
		      }  
		   }
		   //        (         )            
		   this.swap(i+1, r, Array); 
		   return i + 1;  
	} 
	/**
	 *       
	 * @param a
	 * @param b
	 * @param arraySort
	 */
	private  void swap(int a, int b, int[] arraySort) {      
        int tmp = arraySort[a];      
        arraySort[a] = arraySort[b];      
        arraySort[b] = tmp;      
   }
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] arrays = {43,36,15,11,9,12,35}; 
//		int[] arrays = { 12,9,15,11,36};
		SortUtil su=new SortUtil();
		su.quickSort(arrays, 0, arrays.length-1);
		for(int i=0;i<arrays.length;i++){
			System.out.print(arrays[i]+",");
		}
		
	}

}