2022-03-12 15:48

Java数据结构与算法——排序的基础概念

王姐姐

JavaEE

(904)

(0)

收藏

1、时间复杂度

算法的时间复杂度是一个函数,其定量的描述了一个算法运行时间和输入规模之间的关系。通常用O表示,且不包括这个函数的低阶和首项系数。如果一个算法的执行时间为2n^2+5n+4,那么该算法时间复杂度就可以表示为O(n^2)。

一般的时间复杂度,由好到坏大概有这么几种O(1)、O(logn)、O(n)、O(nlogn)、O(n^k)(k>=2),一般情况下,当算法时间复杂度高于O(n^2)时,性能就变得相当差,此时就该想办法寻求更优的方案。


O(n^2)的情形

    for(int i=0;i<n;i++){        //code...
        for(int j=0;j<n;j++){            //code...
        }
    }

O(nlogn)的情形

    for(int i=0;i<n;i++){        //code...
        for(int j=i;j<n;j++){            //code...
        }
    }

O(logn)的情形

    for(int i=0;i<n;i+=2){        //code...
    }

O(1)的情形

    //与n无关的有限次的表达式,例如赋值,简单的运算等

2、空间复杂度

空间复杂度是一个算法执行过程中所消耗的临时空间的一个度量。同时间复杂度一样,也不包括这个度量函数的低阶项和首项系数。相对的应的,空间复杂度也有O(1)、O(logn)、O(n)、O(nlogn)、O(n^k)(k>=2)。

3、稳定性

在排序算法中,评估一个算法的优劣,除了时间复杂度和空间复杂度以外,还有一个衡量指标就是稳定性。在一个待排序的序列中,可能存在多个相等的项,经过排序后如果这些项的相对次序保持不变,则我们说这个算法是稳定的,否则就是不稳定的。

研究稳定性的意义在于,如果算法是稳定的,那么第一个元素排序的结果可以被第二个等值的元素在排序时所用,也就是说可以避免多余的比较。

原文链接:https://segmentfault.com/a/1190000014099784


0条评论

点击登录参与评论