Java学习日记 -选择排序和冒泡排序的对比

        今天重新拿来当时学习时就有点糊涂的各种排序方法来好好研究一下,这篇主要对比一下选择排序和冒泡排序两种方法之间的差异

        冒泡排序大家应该已经非常了解了,就是通过一个嵌套循环使大的数沉下去小的数浮上来的一种方法,而选择排序则是通过一次又一次遍历数组来找到最小的换到前面的方法,实际上也是一个嵌套循环就可以解决的问题,所以当时学的时候我就对于这两种方法有点区分不开。通过看了看别人的代码现在算是弄明白了两者之间的差别

        其实两者的时间复杂度都是O(n²),主要的区别是在于交换次数的不同,冒泡排序只要符合后面的数比自己小就交换,一个一个比一个一个换;而选择排序是遍历一边数组后找到最小的数,记录这个数的值和该值的索引(位置),之后将这个值赋给前面,把前面的值赋给得到的索引(位置),实际上一次遍历仅仅交换一次。

我嘴比较笨,只能这么解释,还是看代码比较直观

这是冒泡排序的:

   public static  void Maopao(int[] a){
        int temp = 0;
        for (int i = 1; i <a.length ; i++) {         //控制需要遍历的次数,数组长度-1
            for (int j = 0; j <a.length-i ; j++) {   //控制每个数需要对比的次数,大数往下沉
                if(a[j+1]<a[j]){                    //交换
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }
    }

这是选择排序的:

    public static void Selectsort(int[] a) {
        for (int i = 0; i < a.length-1; i++) {//循环次数,也是数组长度-1
            int value = a[i];                  //先得到最开始的值于位置
            int position = i;
            for (int j = i + 1; j < a.length; j++) {//找到最小的值和位置
                if (a[j] < value) {
                    value = a[j];       //获取最小的值
                    position = j;       //获取取得最小值的位置
                }
            }
            a[position] = a[i];//进行交换,注意这里每次i循环仅仅执行一次,是与冒泡排序最大的区别
            a[i] = value;
        }
    }

从代码中就可以比较直观的看出来选择排序只是遍历找到最小的数,得到位置和值之后跳出内循环再做一次交换,所以交换次数比冒泡排序少了不少

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值