数据结构-排序-快速排序之随机选取基准法

版权声明:中华人民共和国持有版权 https://blog.csdn.net/Fly_Fly_Zhang/article/details/86140965

思想:基本的快速排序选取第一个或者最后一个元素作为基准。这样在数组已经有序的情况下,每次划分将得到最坏的结果。一种比较常见的优化方法是随机化算法,即随机选取一个元素作为基准。这种情况下虽然最坏情况仍然是O(n2),但最坏情况不再依赖于输入数据,而是由于随机函数取值不佳。实际上,随机化快速排序得到理论最坏情况的可能性仅为1/(2n)。所以随机化快速排序可以对于绝大多数输入数据达到O(nlogn)的期望时间复杂度。

实现代码如下:

class Test{
    /*
       * @Description :  一趟快速排序
       * @param array
      * @param low
      * @param high
       * @return :   int
       * @exception :
       * @date :   2019/1/9 11:22
       */
     public static int partion(int [] array,int low,int high){

         int tmp=array[low];
         while(low<high){
             while(low<high && array[high]>tmp){
                 high--;
             }
             if(low>=high){
                 break;
             }else{
                 array[low]=array[high];
             }
             while(low<high&&array[low]<tmp){
                 low++;
             }
             if(low>=high){
                 break;
             }else{
                 array[high]=array[low];
             }
         }
         array[low]=tmp;
         return low;
     }
     public static void swap(int []array ,int low,int rand){
         int tmp=array[low];
         array[low]=array[rand];
         array[rand]=tmp;
     }
     public static void quick(int [] array,int low,int high){
         Random random=new Random();
         int randNum=random.nextInt(high-low)+low+1; //low 和 high之间的所有随机数
         swap(array,low,randNum);
         int par=partion(array,low,high);  //下一趟排序新的基准
         if(par>low+1){
             quick(array,low,par-1);
         }
         if(par<high-1){
             quick(array,par+1,high);
         }
     }
     public static void quickSort(int [] array){ 
         quick(array,0,array.length-1);
     }
     public static void main(String [] args){
         int array []=new int[10000];
         Random random=new Random();
         for(int i=0;i<array.length;i++){
             array[i]=random.nextInt(10000)+1;
         }
         quickSort(array);
     }
    }


猜你喜欢

转载自blog.csdn.net/Fly_Fly_Zhang/article/details/86140965