Java基础功---数组的使用和算法

目录

数组

默认初始化值

数组在内存中的存储

一维数组在内存的存储

二维数组在内存中的存储

数组算法

冒泡排序

选择排序

二分查找


数组

默认初始化值

char:虽然是字符型,但是初始化值为数值0('\u0000'),不是字符'0'

boolean:false

引用数据类型:null

int:0

float,double:0.0

数组在内存中的存储

虚拟机栈:存储正在执行的Java方法的局部变量表

堆:引用数据类型的对象,用new的都在这

方法去:被虚拟机加载类的信息,常量,静态方法,即时编译后的代码

程序计数器:每个线程下一条指令的地址

一维数组在内存的存储
    public static void main(String[] args) {
        int[] arr1=new int[4];
        arr1[0]=0;
        arr1[1]=1;
        
        
        String [] strings=new String[4];
        strings[0]="Tom";
        strings[1]="张三";
    }

初始化时候要确定好"容量",然后赋值为默认数据类型

main()

arr1:0Xaabb

arr2:0Xacbc

0Xaabb

0->0
0->1
0
0

0Xacbc

null->Tom
null-张三
null
null

二维数组在内存中的存储
    public static void main(String[] args) {
        int[][] arr1=new int[4][4];
        arr1[0][0]=0;
        arr1[0][1]=1;


        String [][] strings=new String[4][];
        strings[0]=new String[4];
        strings[0][1]="张三";
        
    }

两种情况:

        1;动态初始化1:int [ ] [ ] arr=new int [3][4];

外层默认存储地址

内层存储一个一维数组

        2:动态初始化2:int [ ] [ ] arr=new int [3][ ];

未曾元素为null,指针无指向

内层调用时产生空指针异常(nullPointerException)

main()


arr1:0Xmnss

arr2:0Xacaa

0Xmnss:
0x1234
0x1285
0x12gh
0x12as

0x1234:

0->00->100
0Xacaa
null->0X69sv
null
null
null
0X69sv
null->Tomnullnullnull

数组算法

冒泡排序:

从第一个元素开始,把元素1,2比较,较大的放到2的位置;2,3比较,较大的放到3.....最后一个元素就是最大的元素,然后循环,将剩下的数组继续进行冒泡

public class Java07数组_maopaopaixv {
    public static void main(String[] args) {
        int[] num={1,3,5,2,4};
        for (int j=0;j< num.length;j++){
            for (int i=0;i< num.length-j-1;i++){
                if (num[i]>num[i+1]){
                    int temp=num[i];
                    num[i]=num[i+1];
                    num[i+1]=temp;
                }
            }
        }
        for (int i=0;i< num.length;i++) {
            System.out.println(num[i]);
        }
    }
}

选择排序:

标记最大的元素为第一个元素,将他与后面的元素进行比较,后面的更大就赋值更新MAX,到最后再与最后一个位置的元素交换位置,只需要进行最后一次交换

public class Java07数组_xvanzepaixv {
    public static void main(String[] args) {
        int[] num={1,3,5,2,4};
        for (int j=0;j< num.length;j++) {
            int max = 0;
            for (int i = 0; i < num.length-j; i++) {
                if (num[max] < num[i]) max = i;
            }
            int temp = num[num.length-1-j];
            num[num.length-1-j] = num[max];
            num[max] = temp;
        }
        for (int i=0;i< num.length;i++) {
            System.out.println(num[i]);
        }
    }
}

二分查找:

用于已经排好顺序的数组,找到数组中间的数字,与待查找数组比较大小,小于待查找数字说明在后一半,大于说明在前一半,等于即找到,如果标记的star和end相遇则说明数组里没有要找的元素

public class Java07数组_erfenchahzao {
    public static void main(String[] args) {
        int[] num={1,2,3,4,5,6,7,8,9};
        int a=8;//待查找元素
        int star=0,end= num.length-1,mid=(star+end)/2;//待查找部分数组的开始位次、结束位次、中间
        while(true){
            if (num[mid]>a){
                end=mid;
                mid=(star+end)/2;
            }
            if (num[mid]<a){
                star=mid;
                mid=(star+end)/2;
            }
            if (num[mid]==a){
                System.out.println(mid);
                break;
            }
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不爱吃于先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值