冒泡排序和二维数组

冒泡排序

每次比较相邻两数
小的交换到前面
每轮结束后最大的数交换到最后
升序排列:

         //从前向后遍历
        //相邻两数比较,不满足顺序就交换
        int[] a = new int[10];
        for (int i = 0; i < a.length; i++) {
            a[i]=(int)(Math.random()*100);
        }
        System.out.println(Arrays.toString(a));
        for (int i=0;i<a.length-1;i++){//比较的轮数
            boolean isChanged=false;
            for (int j=0;j<a.length-1-i;j++){//a.length-1 防止数组越界  a.length-1-i 每次确定的最大值不需要再比较了
                if (a[j]>a[j+1]){
                    isChanged=true;
                    int temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                }
            }
            if (!isChanged){//判断是否交换
                System.out.println("数组已经有序不需要继续比较");
                break;
            }
        }
        System.out.println(Arrays.toString(a));

在这里插入图片描述
外层循环:控制比较多少轮 5个数字比较4轮
内层循环:控制每轮比较多少次
交换数据

使用Arrays为数组排序

        int[] a = new int[10];
        for (int i = 0; i < a.length; i++) {
            a[i]=(int)(Math.random()*100);
        }
        System.out.println(Arrays.toString(a));
        Arrays.sort(a);//升序
        System.out.println(Arrays.toString(a));
        int[] b=Arrays.copyOf(a,10);//复制
        System.out.println(Arrays.toString(b));
        System.out.println(Arrays.equals(a, b));//数组的比较
        System.out.println(a==b);//比较内存地址
        int[] c= new int[10];
        Arrays.fill(c,10);//将数组元素都赋值为10
        System.out.println(Arrays.toString(c));

查找

        int[] a={10,20,30,40,50,60,70,80,90};
        int num=59;
        int i =Arrays.binarySearch(a,num);
        System.out.println(i);//负数没找到
        Arrays.binarySearch(a,0,6,num);//区间是[0,6)范围内查找

二分查找

        int[] a={10,20,30,40,50,60,70,80,90};
        int num=20;
        //二分法查找  前提是有顺序
        //1、定义头位置定义尾位置
        // 2、定义中间位置,与输入的数字进行比较
        //3、如果比中间数大,头会变成中间位置+1
        //4、如果比中间数小,尾部变成中间位置-1
        //5、如果只有一个元素,比完就结束了
        //6、只要找到就立刻结束
        int start=0;
        int end=a.length-1;
        while(start<=end) {
            //如果只有一个元素
            if (end==start){
                if (a[start]==num){
                System.out.println("在下标为"+end+"的位置找到"+num);
                break;
                }else {
                    System.out.println("没有这个元素");
                    System.exit(1);
                }
            }
            int mid=(start+end)/2;
            if (a[mid]>num){
                end=mid-1;
            }else if (a[mid]<num){
                start=mid+1;
            }else {
                System.out.println("在下标为"+mid+"的位置找到"+num);
                break;
            }
        }

二维数组

int[][] scores; //定义二维数组
scores=new int[5][50]; //分配内存空间
//或者
int [ ][ ] scores = new int[5][50];

int [ ][ ] scores = new int[2][];
如果写成这样,需要对每个一维数组重新定义
scores[1]=new int[3];
scores[0]=new int[2];
二维数组实际上是一个以一维数组做为元素的一维数组

        //5个班5个成绩
        int[][] a =new int[5][5];
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                a[i][j]=(int)(Math.random()*100);
            }
        }
        for (int i = 0; i < a.length; i++) {
            System.out.print(Arrays.toString(a[i]));
            System.out.println();
        }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值