一维数组
一、数组的定义和使用
1.数组的定义
数组是一个变量,存储相同数据类型的一组数据。
数组的基本要素:
(1)标识符:数组的名称,用于区分不同的数组。
(2)数组元素:向数组中存放的数据。
(3)元素下标:对数组元素进行编号,从0开始,数组中的每个元素都可以通过下标来访问。
(4)元素类型:数组元素的数据类型。
数组注意的地方:
数组长度固定不变,避免数组越界。
数组中的所有元素必须属于相同的数据类型。
2.数组的使用
(1)声明数组
数据类型[] 变量名;//声明数组时不规定数组长度
(2)分配空间
数据类型[] 数组名=new 数组类型[大小];//数组元素根据类型不同,有不同的初始值
(3)数组赋值
//方法一
int[] scores={89,79,76};
int[] scores=new 数据类型[]{89,79,76};//边声明边赋值
//方法二
Scanner sc=new Scannner(System.in);
for(int i=0;i<30;i++){
scores[i]=sc.nextInt();
}//动态的从键盘录入信息并赋值
(4)处理数据
// 例题:计算5位学生的平均分
int []scores={60,70,80,90,88};
double avg;
int sum=0;
for(i=0;i<scores.length;i++){
sum+=scores[i];
}
avg=sum/scores.length;
3.数组与内存
二、数组的基本使用及常用操作
1.数组的基本使用
public static void main(String[] args){
int[] arr=new int[30];//声明数组
for(int i=0;i<arr.length;i++){
arr[i]=(int)(Math.random()*100);//数组遍历随机赋值
}
System.out.print("[");
for(int i=0;i<arr.length;i++){
if(i==arr.length-1){
System.out.print(arr[i]+"]");//数组元素下标与最后一个下标相同则输出元素加上]
break;
}
System.out.print(arr[i]+"");
}
}
2.求数组中的最大值
public static void main(String[] args){
int[] a=new int[100];
for(int i=0;i<a.length;i++){
a[i]=(int)(Math.random()*100);
}
System.out.print("[");
for(int i=0;i<a.length,i++){
if(i==a.length-1){
System.out.print(a[i]+"]");
}else{
System.out.print(",");
}
}
//最大值
int max=-1;
for(int i=0;i<a.length,i++){
if(a[i]>max){
max=a[i];
}
}
System.out.println("最大值为:"+max);
}
3.在数组中插入数值,并保持降序
public static void main(String[] args){
int[] a={99,85,82,63,60};
//第一步:先扩容
int[] b=new int[a.length-1];
for(int i=0;i<b.length;i++){
b[i]=a[i];
}
System.out.println(Arrays.toString(b));
int num=88;//定义插入的数
boolean isInsert=false;
//如果找不到比该数大的,则插入首位
for(int i=b.length-2;i>=0;i++){//从后向前比
if(b[i]<num){
b[i+1]=b[i];//比该数小的向后移
}else{
isInsert=true;
b[i+1]=num;//找到比该数大的,则该数在大的后面插入
break;
}
}
if(!isInsert){
b[0]=num;//如果找不到比该数大的,则插入首位
}
System.out.println(Arrays.toString(b));
}
三、选择排序
选择排序是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
public static void main(String[] args){
//基本逻辑:外层循环确定一个位置
//内层循环确定该位置的值(当前最小值)
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++){
int tmp=a[i];//确定位置
int p=i;
for(int j=i+1;j<a.length;j++){
if(tmp>a[j]){
tmp=a[j];
p=j;
}
}
a[p]=a[i];
a[i]=tmp;
}
System.out.println(Arrays.toString(a));
}
四、插入排序
插入排序的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
public static void main(String[] args){
//与基本插入数组的逻辑相同
//只是在外层循环控制需要插入的数值和位置
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=1;i<a.length;i++){
int tmp=a[i];
boolean isInsert=false;
for(int j=i-1;j>=0;j--){
if(a[j]>tmp){
a[j+1]=a[j];
}else{
isInsert=true;
a[j+1]=tmp;
break;
}
}
if(!isInsert){
a[0]=tmp;
}
}
System.out.println(Arrays.toString(a));
}