一、一维数组
1.理接数组
如果存储10000个学生的成绩,难道真要定义10000个变量吗?这显然不可能。另外也不利于数据处理,如要求计算所有成绩之和或最高分,要输出所有成绩,就需要把所有的变量名都写出来,这显然不是一种好的实现方法。
Java针对此类问题提供了有效的存储方式——数组。在Java中,数组是用来存储一组相同类型数据的数据结构。当数组初始化完毕后,Java为数组在内存中分配了一段连续的空间,其在内存中开辟的空间也将随之固定,此时数组的长度就不能再发生改变。即使数组中没有保存任何数据,数组所占据的空间依然存在。
2.定义数组
再Java中,定义数组的语法有如下两种。
数据类型[] 数组名=new 数据类型[数组长度];
或者:
数据类型 数组名[]=new 数据类型[数组长度];
定义数组时一定要指定数组名和数组类型。
必须书写"[]",表示定义了一个数组,而不是一个普通的变量。
“[数组长度]”决定连续分配的空间的个数,通过数组的length属性可获取此长度。
数组的数据类型用于确定分配的每个空间的大小。
3.数组元素的表示和赋值
由于定义数组时内存分配的是连续的空间,所以数组元素再数组里顺序排列编号,该编号即元素下标,它标明了元素再数组中的位置。首元素的编号规定为0,因此,数组的下标依次为0、1、2、3、4……依次递增,每次的增长数是1.数组中每个元素都可以通过下标来访问。例如,数组scores的第一个元素表示为scores[0]。
获得数组元素的语法格式如下:
数组名[下标值]
例如,下面两行代码分别为scores数组的第一个元素和第二个元素值。
scores[0]=65;//表示为scores数组中的第一个元素赋值65
scores[1]=87;//表示为scores数组中的第二个元素赋值87
4.数组的初始化
所谓的数组初始化,就是在定义数组的同时一并完成赋值操作。
数组初始化的语法格式如下:
数据类型[] 数组名={值1,值2,值3,……,值n};
或者:
数据类型[] 数组名=new 数据类型 []{值1,值2,值3,……,值n};
二、算法
1.插入排序
从第二位开始向前比较,进行插入逻辑,如果遇到比自己大的,大的之后移,如果遇到比自己小的,就在后方插入,如果一直没插入,就插入在首位。
public class Demo6
{
public static void main(String[] args)
{
int[] a={1,3,2,5,8,4};
for (int i = 1; i < a.length; i++)
{
int tmp=a[i];
boolean isInsert=false;
for (int j = i-1; j >= 0; j--)
{
if (tmp<a[j])
a[j+1]=a[j];
else
{
a[j+1]=tmp;
isInsert=true;
break;
}
}
if (!isInsert)
a[0]=tmp;
}
System.out.println(Arrays.toString(a));
}
}
2.选择排序
选择排序逻辑:从前向后对每一个小标对应的元素作为基准位与后面所有的元素进行比较,找出最小值与当前下标的元素进行交换,进行下一次排序
public class Demo5
{
public static void main(String[] args)
{
int[] a={1,3,2,5,8,4};
for (int i = 0; i <a.length-1 ; i++)
{
int tmp=a[i];
int index=i;
for (int j = i+1; j < a.length; j++)
{
if(a[j]<tmp)
index=j;
}
if(index!=i)
{
a[i]=a[index];
a[index]=tmp;
}
}
}
}