ioio2
随机取基准
思想:取待排序列中任意一个元素作为基准
引入的原因:在待排序序列是不分有序时,固定选取基准是快排效率低下,要换届这种情况,就引入了随机选取基准



package sort;
//随机取基准
import java.util.Arrays;
import java.util.Random;


public class TestQuickSort2 {

   
    //找到序列的基准并返回基准的下标 
    public static int partion(int []array,int low,int hign){
        
            int tmp=array[low];
            while(low<hign){
                while(low<hign&&array[hign]>=tmp){
                    --hign;
                }
                if(low>=hign){
                    break;
                }else{
                    array[low]=array[hign];
                }
                while(low<hign&&array[low]<=tmp){
                    ++low;
                }
                if(low>=hign){
                    break;
                }else{
                    array[hign]=array[low];
                }
            
        }
            array[low]=tmp;
            return low;
        
    }
    //利用swap方法将随机的基准对应的数与首位置对应的数互换
    public static void swap(int[]array,int start,int end){
        int tmp=array[start];
        array[start]=array[end];
        array[end]=tmp;
    }
    //采用递归的方法再对基准左右边进行快排
    public static void Quick(int[]array,int start,int end){
        //swap(array,start,(int)Math.random()%(end-start+1)+start);
        Random rand=new Random();
        int randNumber=rand.nextInt(end-start+1)+start;//产生基准的随机数
        swap(array,start,randNumber);
        int par=partion(array,start,end);
        if(par>start+1){//左边还需要快排
            Quick(array,start,par-1);
        }
        if(par<end-1){//右边还需要快排
            Quick(array,par+1,end);
        }
        
    }
    
    public static void QuickSort2(int[]array){
        Quick(array,0,array.length-1);
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
      int[]array={1,4,6,7,6,6,7,6,8,6}; 
      QuickSort2(array); 
      System.out.println(Arrays.toString(array)); 
    }
 }

 

 

 

分类:

技术点:

相关文章:

  • 2021-11-19
  • 2022-12-23
  • 2022-01-30
  • 2021-05-23
  • 2021-11-19
  • 2022-12-23
  • 2021-11-30
  • 2022-12-23
猜你喜欢
  • 2021-08-24
  • 2021-04-17
  • 2021-11-19
  • 2021-11-19
  • 2021-05-10
  • 2022-02-02
  • 2021-06-19
相关资源
相似解决方案