zoukankan      html  css  js  c++  java
  • java数据结构和算法--------第六章

    三角数字

    给定一串数字1,3,6,10,15,21.......是否能推出后面几项的值呢。

    显然第N项的值等于第N-1项+N

    a[N]=a[N-1]+N该种数列被称为三角形数字。

    由此可以根据规律计算第N项的值。可以使用循环的方法来计算第N项的值

    int triangle(int n)

    {

       int total=0;

       while(n>0)

         {

             total=total+n;

             --n;

          }

        return total;

    }

    使用循环的方法来算挺好,但是可以考虑用递归,正如两幅图之间对比的那样。

    int triangle(int n)

    {

       return (n+triangle(n-1));

    }

    但是显然上面的程序永远不会结束,陷入了一个庞氏骗局,因为没有终止的条件。

    int triangle(int n)

    {

       if(n=1)

       return 1;

    else

       return (n+triangle(n-1));

    }

    为了清楚地观察到递归函数的执行过程,程序中加入了测试语句。可以看到整个递归的调用过程。

    通过上面的三幅图看到整个递归程序的执行过程。

    阶乘

    阶乘实际上就是把上面三角形的问题,稍微改变一下。

    递归的二分查找

    下面两幅图对比,可以看到我们将递归插入到了二分查找中

    图二实质上是一种分治算法,把原来的大问题,细分为一个个的小问题。这样小问题便于求解。

    汉诺塔问题

    递归的算法

    归并排序

    冒泡排序,插入排序,选择排序三者的时间复杂性是O(N^2)

    归并排序的时间复杂性是O(N*lgN),显然它比前面几个都要快,但是归并排序有一个缺点

    需要较大的存储空间。

    归并两个有序数组

    归并算法的中心是归并两个各自有序的数组,将其合成一个全新的按大小顺序排列的数组。

    一般的归并排序,两个指针指向各自的元素,小的进来,指针后移。直到其中一方数据为空。复制另一方剩余的数据。

    通过归并进行排序

  • 相关阅读:
    [转]shell getopts用法
    [转]KVM虚拟化原理探究
    [转]存储相关的一些概念解释
    [转]绑定设备到驱动
    [转] SCSI, FC, ISCSI协议
    [转译]zoned storage device
    CORS jsonp
    orange---openresty.---authorization,-129.0.1.227,jwt
    vue
    hive sqoop,sqoop-hive import data
  • 原文地址:https://www.cnblogs.com/maowuyu-xb/p/6434821.html
Copyright © 2011-2022 走看看