how2j:JAVA学习笔记——DAY4

1.数组

数组是一个固定长度的,包含了相同数据类型的容器。

2.声明数组

数据类型[] 变量名 or 数据类型 变量名[]

[]:表示该变量是一个数组

int:表示数组中所有元素的数据类型

但是声明数组并不代表创建数组。

3.创建数组

创建数组时要指明数组长度:new int[5]

引用:若变量代表一个数组,则称该变量为引用。

引用与赋值:

int c=5,表示c赋值为5。

a=new int[5],表示让a这个引用指向数组。

e.g. int[] b =new int[5];//声明数组b的同时使其指向一个元素个数为5的数组。

4.访问数组

数组下标为0代表数组的第一个元素。

5.数组长度

.length属性用于访问一个数组的长度。数组访问下标范围为[0,length-1],一旦超过这个范围,就会产生数组下标越界异常。

6.数组初始化

①、分配空间与赋值分步进行

int[] a=new int[4];
System.out.println(a[0]);//若没有赋值,则int类型的数组默认值为0

//进行赋值
a[0]=6;
a[1]=7;
a[2]=8;
a[3]=9;

②、分配空间与赋值同时进行

int[] a=new int[]{6,7,8,9,5};//写法一:分配空间同时赋值
int[] b={1,2,3,4,5};//写法二:省略了new int[],效果一样
//注:若指定了数组的内容,就不能同时设置数组长度,如 
//int[] c = new int[3]{100,102,444,836,3236};这种写法是错误的因为长度为3,内容为5产生矛盾了

7.排序

①、选择法排序

正排序

​ 先把数组中的第一位a[0]和其他所有位a[i]进行比较,只要比第一位小就把该数交换到第一位。比较完以后,第一位就是所有元素中最小的数。

int temp;
if(a[i]<a[0]){
temp=a[0];
a[0]=a[i];
a[i]=temp;
}
//和第一个数进行比较,i应该从1开始

​ 把第二位a[1]和其他所有位a[i]进行比较,只要比第二位小就把该数交换到第二位。比较完以后,第二位就是所有元素中第二小的数。

int temp;
if(a[i]<a[1]){
temp=a[0];
a[0]=a[i];
a[i]=temp;
}
//和第二个数进行比较,i应该从2开始

​ 以此类推。观察上述两式,可以发现交换是从第一位开始的,所以以上所有可以写成:

int a [] = new int[]{18,62,68,82,65,9};
for(int j=0;j<a.length-1;j++){
    for(int i=j+1;i<a.length;i++){
        if(a[i]<a[j]){
            int temp=a[j];
            a[j]=a[i];
            a[i]=temp;
        }
    }
}

for(int i=0;i<a.length;i++){
    System.out.println("从小到大排序后的数组元素:"+a[i]);
}

倒排序

int a [] = new int[]{18,62,68,82,65,9};
for(int j=0;j<a.length-1;j++){
    for(int i=j+1;i<a.length;i++){
        if(a[i]>a[j]){
            int temp=a[j];
            a[j]=a[i];
            a[i]=temp;
        }
    }
}

for(int i=0;i<a.length;i++){
    System.out.println("从小到大排序后的数组元素:"+a[i]);
}

②、冒泡排序

正排序

​ 第一步:从第一位开始,把相邻两位(a[0]与a[1]、a[1]与a[2]……a[i]与a[i+1])进行比较,将数更大的往后移,直到将最大的数移到最后一位。

if(a[i]>a[i+1]){
    int temp=a[i];
    a[i]=a[i+1];
    a[i+1]=temp;
}

​ 第二步:从第一位开始,把相邻两位进行比较,将数更大的放在后面,直到将第二大的数放在倒数第二个位子(不用和最后一位进行比较)。

​ 以此类推。

​ 外层循环表示排序次数(等于元素个数-1),内层循环表示排序元素下标(等于数组长度-1-i)(数组长度-1表示最大下标)(i表示外层循环排序序数,当i=元素个数-1时就不用再进行排序,因为后面的数已经是排好的,第一个数一定为数组中最小的数。)。

int[] arr=new int[10];
for(int i=0;i<arr.length;i++)}{
	arr[i]=(int) Math.random()*100;
}
//给数组中元素赋值

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

倒排序

int[] arr=new int[10];
for(int i=0;i<arr.length;i++)}{
	arr[i]=(int) Math.random()*100;
}
//给数组中元素赋值

for(int i=0;i<arr.length;i++){
	for(int j=0;j<arr.length-1-i;j++){
		if(arr[j]<arr[j+1]){
			int temp=arr[j];
			arr[j]=arr[j+1];
			arr[j+1]=temp;
		}
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值