数据结构与算法Java(2)——冒泡排序 递归

目录

1. 冒泡排序

2. 递归 


1. 冒泡排序

用一个例子说明一下原理。

这是乱序的,初始的数组{32,4,12,7,22}

32412722

下面是第一次冒泡(1,2位置的两个数比较 ,调整位置)

43212722

第二次冒泡 (2,3位置的两个数比较,调整位置)

41232722

第三次冒泡(3,4位置的两个数比较,调整位置)

41273222

第四次冒泡(4,5位置的两个数比较,调整位置)

41272232

到此,只是将最大的值移到了最右边,接下来继续冒泡4次,将第二大的值移到右边倒数第二个位置,一直下去,整个数组就排好了序。

时间复杂度(最坏情况):O(n^2)

代码实现:

public void BubbleSort(int[] array){
        int length=array.length;
        int nn;
        for(int i=0;i<length-1;i++){
            for(int j=0;j<length-1-i;j++){
                if(array[j+1]<array[j]){ //升序,如果要降序的话就改为>
                    nn=array[j];
                    array[j]=array[j+1];
                    array[j+1]=nn;
                }
            }
        }
    }

2. 递归 

递归:直接或者间接调用自己的程序叫做递归。

递归调用的次序必须是有限的(即必须有条件来终止递归),将大问题分解为子问题,而且这些子问题的求解方法与原方法相同或极度类似。

比如:求阶乘

public static int factorial(int n){
    if(n == 0){
        return 1;
    }
    else{
        return n * factorial(n - 1);
    }
}

求斐波拉契的第n项。斐波拉契数列是,1,1,2,3,5,。。。 即头两项是1,第三项开始,每一项是前两项的和。

public int fibonacci(int n){
    if(n == 0 || n == 1){
        return n;
    }else{
        return fibonacci(n - 1) * fibonacci(n - 2);
    }
}

递归的优点:代码简洁易懂,在有些情况下,递归是非常适合的。

递归的缺点:内存消耗高,只需时间较长,因为方法是一层一层地调用下去的,前面的方法要等待后面方法的返回结果才能继续执行,所以只要递归条件没有触发,前面所有的方法都要等着,即占着内存等,当递归条件触发后,才从最后面的方法一层一层的返回上来,最后完成。

因此,能不用递归就不用递归,当然递归层次不多的情况下,还是可以考虑的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值