您的位置:首页 > 编程语言 > Java开发

快速排序方法Java实现与分析

2005-07-30 23:55 946 查看
package paul;
/**
 *<p>Title: 快速演算法</p>
 *@author 良葛格
 *@author paulliu
 */
public class QuickSort {
  public QuickSort() {
  }
  /**
   * printArray 用来跟踪了算法演算过程
   */
  public static void printArray(int[] number) {
    for(int k=0 ;k<number.length;k++){
         System.out.print(number[k]);
         System.out.print(" ");
        }
   System.out.print("/n");
  }
  /**
   * sort 只是为了便于观察分析才设了这个方法,可有可无。
   * @param number int[] 数组
   */
  public static void sort(int[] number,String[] strNumber) {
    sort(number,0,number.length-1);
   //sortArr(number,0,number.length-1,strNumber);
   //thirdsort(number,0,number.length-1,strNumber);
   //sort(number,0,number.length-1);
  }
  /**
   * sort
   * 开始时,以左边第一个元素为轴
   * @param number int[]
   * @param left int
   * @param right int
   */
  public static void sort(int[] number, int left, int right) {
    if(left<right)
    {
      int s=number[left];
      int i=left;
      int j=right+1;
      while(true)
      {
        //令索引 i 從數列左方往右方找,直到找到大於 s 的數
        while(i+1<number.length &&number[++i]<s);
        //令索引 j 從數列右方往左方找,直到找到小於 s 的數
        while(j>0&&number[--j]>s);
        if(i>=j) break; //如果 i >= j,則離開迴圈
        swap(number,i,j);//如果 i < j,則交換索引i與j兩處的值
       
      }
      //将左侧轴与j交换
      number[left]=number[j];
      number[j]=s;
      sort(number,left,j-1);//轴左边进行递归
      sort(number,j+1,right);//轴右边进行递归
        
   }
  }
  private static void sortArr(int[] number, int left, int right,String[] strNumber) {
    if(left<right)
    {
      int s=number[left];
      int i=left;
      int j=right+1;
      while(true)
      {
        //令索引 i 從數列左方往右方找,直到找到大於 s 的數
        while(i+1<number.length &&number[++i]<s);
        //令索引 j 從數列右方往左方找,直到找到小於 s 的數
        while(j>0&&number[--j]>s);
        if(i>=j) break; //如果 i >= j,退出循环
        //swap(number,i,j);//如果 i < j,則交換索引i與j兩處的值
        swapstr(number,strNumber,i,j);
      }
      //将左侧轴与j交换
      number[left]=number[j];
      number[j]=s;
      sortArr(number,left,j-1,strNumber);//轴左边进行递归
      sortArr(number,j+1,right,strNumber);//轴右边进行递归
        
   }
  }
  /**
   * provesortfirst
   * 以中间的元素为轴
   * @param number int[]
   * @param left int
   * @param right int
   */
  public static void provesortfirst(int[] number, int left, int right) {
    if(left < right) {
      int s = number[(right+left)/2];
      int i = left - 1;
      int j = right + 1;
      while(true) {
      // 向右找
      while(number[++i] < s) ;
      // 向左找
      while(number[--j] > s) ;
      if(i >= j)
        break;
      swap(number, i, j);
      
    }
    provesortfirst(number, left, i-1);
    provesortfirst(number, j+1, right);
    
   }
 }
 
  private static void thirdsort(int[] number,int left, int right,String[] strNumber)
     {
       if(left < right) {
         int q = partition(number, left, right,strNumber);
         thirdsort(number, left, q-1,strNumber);
         thirdsort(number, q+1, right,strNumber);
       
       }
     }
     /**
      *
      * @param number int[]
      * @param left int
      * @param right int
      * @return int
      */
     private static int partition(int number[],int left, int right,String[] strNumber)
     {
       int s = number[right];  //先以右边最后一个为轴
       int i = left - 1;
       for(int j = left; j < right; j++)
       {    if(number[j] >= s)
            {    i++;
              swapstr(number,strNumber,i,j);
            }
          }
          swapstr(number,strNumber,i+1, right);
          return i+1;
        }
     /**
      * swap
      * 交换值方法
      * @param number int[]
      * @param i int
      * @param j int
      */
     private static void swap(int[] number, int i, int j) {
       int t;
       t=number[i];
       number[i]=number[j];
       number[j]=t;
     }
  /**
   * swapstr
   *
   * @param strNumber String[]
   * @param i int
   * @param j int
   */
  private static void swapstr(int[] number,String[] strNumber, int i, int j) {
   String t;
   t=strNumber[i];
   strNumber[i]=strNumber[j];
   strNumber[j]=t;
   int m;
   m=number[i];
   number[i]=number[j];
   number[j]=m;
  }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java string 算法 class