实现一个快速排序算法,并分析算法的时间复杂度。

复制代码
public class Test_A30 {
    public void quickSort(int[] arr,int low,int hight){
        if(low<hight){
            int pivot=partition(arr,low,hight);
            quickSort(arr,low,pivot-1);
            quickSort(arr,pivot+1,hight);

        }
    }
    private int partition(int[] arr,int low,int high){
        int pivot=arr[high];
        int i=low-1;
        for(int j=low;j<high;j++){
            if(arr[j]<pivot){
                i++;
                int temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
            }
        }
        int temp=arr[i+1];
        arr[i+1]=arr[high];
        arr[high]=temp;
        return i+1;
    }
    public static void main(String[] args){
        Test_A30 test_30=new Test_A30();
        int[] arr={24,6,87,23,1,45};
        test_30.quickSort(arr,0,arr.length-1);
        for(int num:arr){
            System.out.println(num+"");
        }
    }
}
复制代码
时间复杂度分析:

在最好情况下,每次划分时都能将数组均匀地划分为两个部分,此时时间复杂度为O(nlogn)。
在最坏情况下(每次划分都只将数组中的一个元素放到正确位置),时间复杂度为O(n^2)。
平均时间复杂度为O(nlogn)。
相关推荐
WX-bisheyuange4 小时前
基于Spring Boot的教师个人成果管理系统的设计与实现
java·spring boot·后端
小安同学iter5 小时前
SQL50+Hot100系列(11.9)
算法·leetcode·职场和发展
炼金士5 小时前
基于多智能体技术的码头车辆最快行驶路径方案重构
算法·路径规划·集装箱码头
xunyan62345 小时前
面向对象(上)-封装性的引入
java·开发语言
脸大是真的好~5 小时前
黑马JAVAWeb-05 JDBC入门-预编译SQL-Mybatis入门-Mybatis日志输出-数据库连接池-增删改查-XML映射配置
java
还算善良_6 小时前
XML签名
xml·java·开发语言
梅梅绵绵冰6 小时前
xml方式实现AOP
xml·java·开发语言
小刘max6 小时前
最长递增子序列(LIS)详解:从 dp[i] 到 O(n²) 动态规划
算法·动态规划
桦说编程7 小时前
Guava 迭代器增强类介绍
java·后端·设计模式
谢景行^顾7 小时前
数据结构知识掌握
linux·数据结构·算法