快速排序-递归实现

Posted 成长的足记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序-递归实现相关的知识,希望对你有一定的参考价值。

快速排序算法--递归实现

排序算法比较于其他的排序算法 速度上更快 排序效率更高。。。也是我觉得逻辑比较复杂的一个算法。。经过几个片段晚上的学习,终于明白了其中的原理并代码实现了。在这里分享给大家~~~
  原理:一待排序的数组,我们先找到基准点(关注点) 一般设置为数组第一个元素 其实任何一个都可以。然后接下来就是排序了定义两个循环 一个 i 循环从左往右, 一个 j 循环从右往左,i 循环如果比基准点数小,就不断往右走。一旦碰到比基准点大的数就将此值抛给 j 循环此时停留的位置,j 循环如果比基准点数大,就不断往左走,一旦碰到比基准点小的数就将此值抛给 i 循环所停留的位置。那么,就存在一个美好的时刻 i 和 j 碰到一起了 那么此时的就需要将基准点值赋值给该位置的值,这样的话 在基准点左边的所有element就全部比基准点数小(但不一定是有序的),同理,在基准点右边的所有element就全部比基准点大,那么,就完成了一次循环。。。剩下的就是重复上述过程,那么就可以用递归。针对左边的全部element 开始位置就是start(此时是0) 那么结束位置为基准点位置-1,右边部分开始位置基准点位置+1,结束位置end(此时是arr.length-1) 然后第二次结束  最后在细分(类似二分查找)  往返。。。最终待排序序列全部排序完毕!

代码示例

注:仅供参考,如有更优方式,可以留言

package cn.test;
class Main{
   public static void main(String[] args) {
       int[] arr = {2,45,6,5,2,67,4};
       QuickSort(arr,0,arr.length-1);
       for(int i=0;i<arr.length;i++){
           if(arr[i] ==  arr[arr.length-1]){
               System.out.println(arr[i]);
           }else{
               System.out.print(arr[i]+" ");
           }
       }
   }
   public static void QuickSort(int[] arr,int start,int end){
       if(start<end){
           int index = GetIndex(arr,start,end);
           QuickSort(arr, start, index-1);
           QuickSort(arr, index+1, end);
       }
   }
   public static int GetIndex(int[] arr, int start, int end) {
       int i= start;
       int j= end;
       int index = arr[start];
       while(i<j){
           while(i<j){
               if(arr[j]<index){//j往左走
                   arr[i] = arr[j];
                   break;
               }
               j--;
           }
           while(i<j){
               if(arr[i]>index){//i往右走
                   arr[j] = arr[i];
                   break;
               }
               i++;
           }
       }
       arr[i] = index;
       return i;
   }
}

以上是关于快速排序-递归实现的主要内容,如果未能解决你的问题,请参考以下文章

六千字快速复习七种常用排序

六千字快速复习七种常用排序

八大排序 (万字总结)(详细解析,建议收藏!!!)

2021-10-21java:六千字快速复习七种常用排序

java 使用一些基准测试代码实现Naive递归快速排序。请注意,此实现仅用于演示。它会失败

C语言快速排序代码