zoukankan      html  css  js  c++  java
  • 排序算法总结

    快速排序的空间复杂度为什么是logN?

    快速排序的递归代码如下:

        public static void sort(int[] a, int lo, int hi) {
    
            if(hi<=lo) return;
            int j = partision(a, lo, hi);
            sort(a, lo, j-1);
            sort(a, j+1, hi);
        }

    每次递归都会返回一个中间值的位置 j , 必须使用栈存储,所以空间复杂度就是栈用的空间(栈中存储j的个数)。

    j所占用栈的空间大小为 logN,这里计算栈中存储j的个数这需要考虑 递归调用 sort(a, lo, j-1) 即可,因为调用 sort(a, j+1, hi) 时, sort(a, lo, j-1)所产生的j已经释放了。

    归并排序每次递归需要用到一个辅助表,长度与待排序的表相等,虽然递归次数是O(log2n),但每次递归都会释放掉所占的辅助空间,所以下次递归的栈空间和辅助空间与这部分释放的空间就不相关了,因而空间复杂度还是O(n)。

  • 相关阅读:
    UVa 1331 最大面积最小的三角剖分
    UVa 1626 括号序列(矩阵连乘)
    POJ 3295 Tautology(构造法)
    POJ 2586 Y2K Accounting Bug(贪心)
    POJ 2109 Power of Cryptography
    abcd
    好数
    Gift
    密码游戏
    约瑟夫游戏
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/8595582.html
Copyright © 2011-2022 走看看