Java中冒泡排序与选择排序

一.冒泡排序

1)定义:相邻两个数比较大小,然后交换位置

2) 分析:

原数 3 2 5 1

  第一趟:
  2 3 5 1
  2 3 5 1  array.length-1-0
  2 3 1 5 确定了一个数(把最大值放在最后面)

  第二趟:
  2 3 1 5  array.length-1-1
  2 1 3 5 又确定了一个数

  第三趟:
  1 2 3 5  array.length-1-2 --->array.length-1-i

冒泡排序
2)代码

1:

public static void main(String[] args) {
        //某一天 把冒泡排序敲下来   熟练工种

        // TODO Auto-generated method stub
       int[]array=new int[] {3,2,5,1};
       //该方法没有返回值 实际上 这个方法操作的是原数组
       //外层循环控制 比较的趟数
       //内层循环控制 -1:避免数组越界
       //内循环 -2:每一趟比较 确定一个数 就意味着 少比较一次


       for(int i=0;i<array.length-1;i++) {

            for(int j=0;j<array.length-1-i;j++) {
                if(array[j]>array[j+1]) {
                    //交换位置
                    int temp=array[j];
                    array[j]=array[j+1];
                    array[j+1]=temp;                    
                }
            }
        }
        System.out.println(Arrays.toString(array));

2:

public class Demo03 {
   //需求:封装一个函数 进行冒泡排序
        public static  void sort(int []array) {
              for(int i=0;i<array.length-1;i++) {

                for(int j=0;j<array.length-1-i;j++) {
                    if(array[j]>array[j+1]) {
                        int temp=array[j];
                        array[j]=array[j+1];
                        array[j+1]=temp;    

                    }
                }
              }System.out.println(Arrays.toString(array));
        }
        public static void main(String[] args) {
         //传入的数组 相当于把数组的首地址传过去
        //注意:这里是地址的传递
        //拿到地址 就可以随便的更改数组元素的位置
        //这是sort函数中 就是对原数组 进行操作
        int[]array=new int[] {3,2,5,1};
        sort(array);
    }

}

内存分析
二.选择排序

1.定义:选择一个数 与 下一个数进行比较
(用这个数和数组中的每一个数进行比较)
一般来说,就选择第0个数交换位置
选择排序
2.代码

public class Demo04 {

    public static void main(String[] args) {
        int[]array=new int[] {3,2,5,1};
        //外循环-1:最后一个数 不用比较了
        //内循环 j=1开始 因为 array[0] 和array[0]不用比较
        // 内循环 +i:每一趟比较 确定一个数
        //         也就是说 每次都可以少比较一个数

        for(int i=0;i<array.length-1;i++) {

            for(int j=1+i;j<array.length;j++) {
                /*
                 * 分析: 谁 和 谁 进行交换
                 * array[j] 和 array[i] 进行比较 交换位置
                 * 
                 */
                if(array[j]<array[i]) {
                    //交换                
                    int temp=array[j];
                    array[j]=array[i];
                    array[i]=temp;
                }               
            }
        }
        System.out.println(Arrays.toString(array));

        // System.out.println(Arrays.sort(array));

    }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值