java排序算法——快速排序

说到排序算法,就不得不说优雅而简练的一种算法——快速排序算法。

快速排序是当前使用率最多,效率最高,速度最快的一种排序算法。

作为排序算法界的扛把子,快速排序算法无疑是程序员首选的一种排序算法。


首先选择一个数据作为基准,然后再让基准数和其他数据进行对比。

先让基准数从数组的右边依次遍历,直到找到小于基准数数值的数,并将该数与基准数相互交换位置

再让基准数从数组的左边依次遍历,直到找到大于基准数数值的数,并将该数与基准数相互交换位置

循环以上步骤,当以上的步骤执行完毕之后,就确定的基准数的位置。

然后将数组以基准值为基准划分为左右两个区域

基准值左边的区域中的数值比基准值小,基准值右边的区域中的数值比基准值大。

然后将左区和右区以同样的方式进行判断和换位。

好了,废话不多说,小的给各位看官上代码。

public static int quicksort(int[] array,int lo,int hi){       //传入数组和索引,lo = [0] ,hi = [array.length() - 1]

int key = array[lo];                                                //定义变量,为变量赋值为第一个数

                 //判断 如果数组中不是只有一个数据,则需要进行排序

while( lo < hi){                     

            //判断如果最后的数据大于或者等于基准值则将最大索引依次递减,直到找到比基准值小的数                                 

while(lo < hi&& array[hi] >= key){                   

                                   hi--;                                                       

}

         //如果找到符合条件的数值,则将基准值和当前值相互换位

array[lo] = array[hi];                                     

            //判断如果第一个数据小于或等于基准值则将最小索引依次递 增,直到找到比基准值大的数

while(lo < hi&&array[lo] <= key){          

lo++;                                                        

}

             //如果找到符合条件的数值,则将基准值和当前值相互换位

array[hi] = array[lo];                                   

}

array[hi] = key;                                         //将基准值记录到尾

return hi;                                                   //返回基准值索引

}

public static void sort(int[] array,int lo,int hi){        

if(lo >= hi){
return;
}
int index = quicksort(array,lo,hi);                //调用方法,接收基准值
sort(array,lo,index-1);                                  //左区递归调用
sort(array,index+1,hi);                                 //右区递归调用


    





    可以配合排序算法使用的二分查找法

    以上是本人对于快速排序的理解

    如有不妥之处,请各位大佬指出

   谢谢