java排序算法——快速排序

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

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

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

                                                                

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

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

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

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

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

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

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

好了,废话不多说,下面来看一下实现代码。

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

         //定义当前基准值,为当前基准值赋值为当前数组的第一个值
         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 = fastSort(array,lo,hi); 

    //左区递归调用           
    sort(array,lo,index-1);  

    //右区递归调用                     
    sort(array,index+1,hi);                        

} 

 

    

 

 

    推荐排序后使用的 - 二分查找法

    以上是笔者对于快速排序的理解

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

    谢谢

                  {\__/}                                          {\__/}
                  ( ·-·)                                          (·-· )
                  / >------------------------------------------------< \
                           |      ☆                            |
                           |         ☆                         |
                           |  ★                                |
                           |         ☆                         |
                           |      ☆                            |
                           |                                   |
                           -------------------------------------

         如有兴趣可以关注我的公众号:

                                          

   

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值