Java算法之 如何用三秒钟排序三亿个随机数 (快速排序,文末彩蛋)


前言

书接上文 , 本以为希尔排序已经很快很快了,没想到今天的快速排序还要快!!!

太快了太快了,芜湖~~


提示:以下是本篇文章正文内容,下面案例可供参考

一、思路图解

思路非常简单 , 很好理解

在这里插入图片描述

二、代码实现

public static void quickSort(int[] arr,int left,int right){
    
    
        int l = left; //左索引
        int r = right; //右索引
        int pivot = arr[(left+right)/2]; //中轴
        int tmp = 0;

        while(l < r){
    
     //左右索引不重合

            while(arr[l] < pivot){
    
     //左侧值小于中轴值, 左索引右移遍历
                l++;
            }

            while(arr[r] > pivot){
    
     //右索引左移遍历
                r--;
            }

            if(l >= r){
    
     //如果左右索引重合或相互越界
                break;
            }

            //上述情况均不满足
            tmp = arr[l]; //左右交换
            arr[l] = arr[r];
            arr[r] = tmp;

            if(arr[l] == pivot){
    
     //如果索引指示的值等于pivot中轴值,就
                r--; //
            }
            if(arr[r] == pivot){
    
     //如果索引指示的值等于pivot中轴值,就
                l++; //
            }
        }

        if(l == r){
    
    
            l++;
            r--;
        }
        //递归
        if(left < r){
    
     //索引还没遍历完整个数组
            quickSort(arr,left,r);
        }
        if(right < l){
    
    
            quickSort(arr,l,right);
        }
    }

时间复杂度

平均情况下 , 快排的时间复杂度为O(nlog2n) ,即基于关键字大小排序的下限

在这里插入图片描述

彩蛋 : 学算法不如跳舞 !

这是一段来自哔哩哔哩的算法趣味视频 , 值得一看哦 !
同时这个系列还涉及了一些其它算法的舞蹈 , 非常有意思 !

传送门

猜你喜欢

转载自blog.csdn.net/qq_45596525/article/details/109713690