时间复杂度的简介

算法的时间复杂度是一个函数,描述了算法的执行时间。通常使用大O符号来表示。
在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变
情况来确定T(n)的数量级。

一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,O(f(n))
分析:随着n的增长,算法执行的时间的增长率和 f(n) 的增长率成正比,
所以 f(n) 越小,算法的时间复杂度越低,算法的效率越高。

常见的时间复杂度分析
有几重for循环,只有一重则时间复杂度为O(n),二重则为O(n^2)依此类推
如果有二分则为O(logn),二分例如二分查找,如果一个for循环套一个二分,
那么时间复杂度则为O(nlogn)

常见的时间复杂度
常数阶O(1),对数阶O(  ),线性阶O(n),
线性对数阶O(nlog2n),平方阶O(n^2),立方阶O(n^3),...,
k次方阶O(n^k),指数阶O(2^n)
随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。

快速排序

快速排序的分析

图片描述

快速排序的流程

图片描述

快速排序的代码实现

    public static void main(String[] args) {
        //1.定义要排序的数组
        int[] arr = {5,2,6,8,4,3,7};
        //2.定义变量low保存数组中第一个元素的索引
        int low = 0;
        //3.定义变量high保存数组中最后一个元素的索引
        int high = arr.length - 1;
        System.out.println("排序前的元素:" + Arrays.toString(arr));
        quickSort(arr, low, high);
        System.out.println("排序后的元素:" + Arrays.toString(arr));
    }
    public static void quickSort(int[] arr,int low,int high){
        //1.定义变量来保存数组第一个元素在数组拍完序后的位置
        int position;
        if(low < high){
            position = findPosition(arr,low,high);
            //2.对小于数组中第一个数的部分进行快速排序
            quickSort(arr, low, position - 1);
            //3.对大于数组中第一个数的部分进行快速排序
            quickSort(arr, position + 1, high);
        }
    }
    //查找第一个元素在要排序的数中的位置
    //当low=high的时候,low和high的值就是第一个元素排序完在数组中的值
    public static int findPosition(int[] arr,int low,int high){
        //1.定义变量temp保存数组的第一个元素
        int temp = arr[low];
        while(low < high){
            //2.high索引对应的元素比temp大,--high
            while(low < high && arr[high] >= temp){
                --high;
            }
            //3.循环结束,high索引对应的值小于第一个元素,将high索引对应的值赋值给low索引对应的值
            arr[low] = arr[high];
            //4.low索引对应的元素比temp小,++low
            while(low < high && arr[low] <= temp){
                ++low;
            }
            //5.循环结束,low索引对应的值大于第一个元素,将low索引对应的值赋值给high索引对应的值
            arr[high] = arr[low];
        }
        //6.将数组第一个元素放置在数组排序完的位置上
        arr[low] = temp;
        //7.最外层循环接收,low=high,第一个元素在拍完序中的位置就是low和hight的值
        return low;
    }
快速排序的时间复杂度为O(nlogn)
冒泡排序和选择排序的时间复杂度为O(n^2)

小黑0105
15 声望1 粉丝

趁年轻,去努力,天道酬勤