1. package com.zz.sort;  

  2.   

  3. import java.util.Random;  

  4.   

  5.   

  6. public class QuickSort {  

  7.       

  8.   public static void main(String[] args) {  

  9.      // int[] iArgs = new int[]{72,6,57,88,60,42,83,73,48,85};  

  10.       int iLength = 5;  

  11.       int[] iArgs = new int[iLength];  

  12.       for(int i = 0; i < iLength; i++){  

  13.           Random objRandom = new Random();  

  14.           iArgs[i] = objRandom.nextInt(1000);  

  15.       }  

  16.       int left = 0; //数组第一个位置  

  17.       int right = iArgs.length - 1;//数组最后一个位置;  

  18.       QuickSort quickSort = new QuickSort();  

  19.       //快速排序  

  20.       quickSort.recursive(iArgs,left,right);  

  21.         

  22.       for(int i = 0; i < iArgs.length; i++) {  

  23.         System.out.print(iArgs[i] + " ");  

  24.       }  

  25.   }  

  26.     

  27.   /** 

  28.    * 递归循环数据 

  29.    */  

  30.   private void recursive(int[] args,int left,int right) {  

  31.      if( left < right) {  

  32.          //数据从left到right坐标的数据进行排序  

  33.          int iIndex = qucikSort(args,left,right); //iIndex 是基数放在数据位置  

  34.   

  35.           //递归算法,对于基数左边排序  

  36.           recursive(args,left,iIndex-1); //为什么left不能从0  

  37.           //递归算法,对于基数右边排序  

  38.           recursive(args,iIndex+1,right);//为什么 right不等于length  

  39.      }  

  40.   }  

  41.     

  42.   /** 

  43.    * 确定基数左边的数都比它小,右边的数都比它大  

  44.    */  

  45.   private int qucikSort(int[] args,int left,int right) {  

  46.       int iBase = args[left];; //基准数  

  47.       while (left < right) {  

  48.          //从右向左找出第一个比基准数小的数  

  49.           while( left < right && args[right] >= iBase) {  

  50.               right--;  

  51.           }  

  52.           args[left] = args[right];  

  53.             

  54.           //从左向右找出第一个比基准数小的数  

  55.           while( left < right && args[left] <= iBase) {  

  56.               left++;  

  57.           }  

  58.           args[right] = args[left];  

  59.       }  

  60.       args[left]= iBase;  

  61.       return left;  

  62.   }  

  63. }