算法:快速排序

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);
        
        
    }
    
}

 

posted @ 2015-03-23 20:33  Mokaffe  阅读(127)  评论(0编辑  收藏  举报