算法:快速排序

package com.hb.jzoffer;



import java.util.Random;



import offer.utilities.ArrayUtils;





public class QuickSort {

    

    public QuickSort() {

        // TODO Auto-generated constructor stub

        

    }

    

    //快速排序 (两端交替着向中间扫描)

    

    private  static  int RandomInRange(int  min , int max){

        if(min < max){

//            Random   random = new Random();

//            int s  = random.nextInt(max)%(max - min + 1) + min ;

            int s = (int)( Math.random() * (max - min) + min );

            return  s ;            

        }else

            return -1 ;        

    }

    

    

    

    public  int  Partition(int[] data , int  start , int  end){

        int  length = data.length;

        if(data == null || start < 0  || end >= length){

            return -1;            

        }

        //随机产生一个index,将此index里面的数值和最后的数值对换

        int  index = RandomInRange(start , end );        

        if(index != -1){

            ArrayUtils.exchangeElements(data, index, end);

            int  small = start - 1 ;

            for(index = start ; index < end ; ++index){

                if(data[index] < data[end]){

                    ++ small;

                    if(small != index){

                        ArrayUtils.exchangeElements(data, index, small);

                    }

                }

            }

            ++small;

            ArrayUtils.exchangeElements(data, small, end);

            return small;            

        }else{

            return -1;

        }

        

    }

    

    public void  QuickSort(int[] data , int length , int start , int end){

        if(start == end ){

            return ;

        }

        int  index = Partition(data, start, end);

        if(index > start){

            QuickSort(data, length, start, index -1) ;

        }

        if(index < end ){

            QuickSort(data, length, index + 1, end);

        }

    }

    

    public static void main(String[] args) {

        QuickSort  quickSort = new QuickSort() ;

        

        int[] data = { 3, 6, 1  ,2, 4 , 5};

        

        int length = data.length;

        int start = 0 ;

        int end = length - 1 ;

        

        quickSort.QuickSort(data, length, start, end);

        

        ArrayUtils.printArray(data);

        

        

    }

    

}

 

你可能感兴趣的:(快速排序)