java实现快速排序

把整个序列看做一个数组,把第零个位置看做中轴,和最后一个比,如果比它小交换,比它大不做任何处理;交换了以后再和小的那端比,比它小不交换,比他大交换。这样循环往复,一趟排序完成,左边就是比中轴小的,右边就是比中轴大的,然后再用分治法,分别对这两个独立的数组进行排序。

package com.daqing.test;

public class Sort {
    
    /**
     * 快速排序,对整数型数组o进行
     * @param o
     * @param low
     * @param hight
     */
    public static void quiteSort( int[] o , int low , int hight ){
              if(low < hight){
                       int povitePosition = adjust(o,low,hight);
                       quiteSort( o , low , povitePosition - 1);
                       quiteSort( o , povitePosition + 1 , hight );
              }
    }
    /**
     * 进行调整
     * @param o
     * @param low
     * @param hight
     * @return
     */
    private static int adjust( int[] o , int low , int hight ){//选定枢轴为low所对应的值
              int pivote = o[low];
              while(low < hight){
                       while(hight > low && compare( pivote , o[hight] ) <= 0 ){// 高位找到比povite大,则符合要求,继续寻找
                                hight -- ;
                       }
                       o[low] = o[hight] ;
                       while(low < hight && compare( pivote , o[low] ) >= 0){ //低位开始找到比povite小,符合要求,继续寻找
                                low ++ ;
                       }
                       o[hight] = o[low];
              }
              o[low] = pivote ;
              return low;
    }
   
    /**
     *
     * @param num1 减数
     * @param num2 被减数
     * @return
     */
    private static int compare(int num1, int num2) {
              return num1 - num2 ;
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
              int[] i = {26,53,48,15,13,46,32,15,0};
              quiteSort(i, 0, i.length-1);
              for(int ii:i){
                       System.out.print(ii+" ");
              }
    }
}
原文地址:https://www.cnblogs.com/lxq0309/p/3666629.html