冒泡排序&选择排序

冒泡排序是当前的值和下一个值比较,如果当前值大于下一个值,就调换两者的位置。每次调用的时候都会确定一个最大值放在最后,就像是在一个一个的泡按照顺序往上冒。

所以内部的循环是

例如数组是a
// 第n个泡泡
for(int i =0 ;i<n;i++){
    if(int[i]>int[i+1]){
        int tem = int[i];
        int[i]  = int[i+1];
        int[i+1] = tem;
    }
    

}

但是一共有a.length个泡泡要冒

所以上面的循环至少要执行a.length次,当然最后一次就只有一个泡泡了

所以还需要嵌套一层for循环,他的作用是控制n是哪一个泡

for(int i = 0;i<a.length;i++){
    // 0<=i<a.length
    // 上面的代码写错了,是第n+1个代表当前的冒的泡的是第几个泡
    // 而n是当前的泡与n个泡的判断大小
    // 所以n的取值范围是0-a.length-1
    // 当n是0的时候,表示冒泡结束
    通过i的计算可以得出n的取值范围在n=a.length-i-1 
}

// 所以最后的代码如下
for(int i = 0;i<a.length;i++){
    for(int j = 0;j<a.length-i-1){
        if(a[j]>a[j+1]){
            int tem = a[j];
            a[j] = a[j+1];
            a[j+1] = tem;
        }
    }
}

 

 

而选择排序就是一个元素和当前大于该元素下标的集合比较,如果元素是最小的,就和当前元素交换。

所以代码如下:

for(int i = 0;i<a.length;i++){
    for(int j=i+1;i<j<a.length;j++){
        if(int[i]>int[j]){
            int tem = int[i];
            int[i] = int[j];
            int[j] = tem;
        }
    }
}

这两种排序方式的时间复杂读是O(n^2),空间复杂度是O(n),都是一样的。用的时候看个人喜好了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值