数据结构可视化学习网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

  • 时间复杂度:运行一段程序所花费的时间。
  • 空间复杂度:运行程序所需要的内存。

以下使用代码说明

 	//执行时间从小到大排序 O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^x)
        int a = 1; //O(1)
        for (int i = 0; i < 10; i++){ //执行11次  O(1) 执行次数小于1000 时间复杂度都为常量阶
            a = a + 1; //执行10次
        }

        int n = Integer.MAX_VALUE; //表示n为未知
        while(a < n){
            a = a * 2; //1 2 4 8 16 2^0 2^1 2^2 2^3 2^4 .... 2^x=n x=log2n 去除常数阶 -> logn O(logn)
        } //案例: 二分法

        for (int i = 0; i < n; i++) { //执行n+1次
            a = a + 1; //执行n次
        } //循环共执行 2n+1次 去除常数阶 O(n)


        for (int i = 0; i < n; i++) { //和以上两种情况相结合,时间复杂度为:O(nlogn)
            while(a < n){
                a = a * 2;
            }
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                a = a + 1;  //共执行n^2次 案例冒泡排序时间复杂度也为 O(n^2)
            }
        }