一、什么是数组
1、数组是有序的元素集合。而元素可以是基本类型,也可以是对象的引用或者其他数组的引用。数组本身就是一个继承Object的对象,所以在分配空间是要用new来建立。
2、数组的建立。
一般有两种方法:
第一种:数据类型 数组名 [ ] 例如 int arrayName [ ]=new int[ 长度],长度是根据需求个数添加进去。
第二种:数据类型[ ] 数组名 例如 int[ ] arrayName=new int [长度 ]
3、数组在内存的表示
当一个数组建立是,系统会在栈内存分配一个arrayName的空间,里面装的是数组在堆内存的引用,所以arrayName里面不是数组,只是数组的引用。
4、如何获得数组元素的值
数组元素的值可以通过arrayName[ index]的方式来访问,例如int[ ] a=new int[3],int b=a[2];像int[ ]数组元素的默认值都是0,也就是说b等于0,还有对数组的访问要注意角标,数组的角标是从0开始的,所以数组最后一个元素为[length-1],如果index大于length-1,就会报异常。
二、多维数组
多维数组可以看作是数组的数组。就是数组元素是数组。
例如 int[ ][ ] a=new int[ 2][3 ],数组a是一个二维数组,如果要访问里面的元素就要提供两个角标,例如a[1][1],他就是访问a里面第二个数组的的第二个元素。
三、数组的排序
1、冒泡排序
冒泡排序就是通过从角标小到大每次对比相邻的两个值,值大的换到后面,每一轮都会把最大的值换到后面,所以第一次只要比较元素个数减1,以后每一轮比较次数都减一次。
for (int j=0;j<arr.length;j++)
{
for (int i=1;i<arr.length-j;i++)
{
if (arr[i+1]>arr[i])//若改成<是从大到小排序
{
int temp = 0;
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
2、选择排序
选择排序就是从第一个位置开始,通过第一个位置的元素与后面的元素进行比较,然后,把最小的换到第一位,然后从第二个位置开始重复操作。
for (int j=0;j<arry.length;j++)
{
//i=j,每比较一轮就减少一个数,比较后,再用第二个数获得后面的最小值
for (int i=j+1;i<arry.length;i++)
{
//换值
if (arry[j]>arry[i])
{
int temp = 0;
temp = arry[j];
arry[j] = arry[i];
arry[i] = temp;
}
}
}
最后是毕老师的一个对数组应用的练习题,代码如下。
步骤
1创建类FindArry
2用for遍历数组,如果查找到相同内容,记录脚标并返回
3如果未找到,就返回-1
如果要在一个有序数组中插入一个数,之后仍有序
就是先查找数组,用折中法:如果查找到有此数,则返回的中间值就是插入的地方,否则将返回的-1改成返回min,即为插入的地方
如:{1, 2, 3, 5, 6, 8, 11, 13}插入8,返回mid = 5;插入后为{1, 2, 3, 5, 6, 8, 8, 11, 13}
插入10,返回min = 6,插入后为{1, 2, 3, 5, 6, 8, 10, 11, 13}
*/
import java.util.*;
class FindArry
{
//方法一:遍历每一个元素查找
public static int findarr(int[] arr,int key)
{
for(int i=0;i<arr.length;i++)
{
if(arr[i] == key)
{
return i;
}
}
return -1;
}
//方法二:折半,前提是数组是按大小顺序排列好的,
//用查找的值和中间值比较,大则和下一半中间值比依次,小则和上一半中间值比,找到则返回。
// 小值的编号在左移或大值的编号在右移。要判断是否大小值的编号相遇,仍若未找到,则不再循环,返回-1
public static int FindArry1(int[] arr,int key)
{
int min,max,mid;
min = 0;
max = arr.length-1;
mid = (min + max)/2;
//循环,查找中间值与要查找的值比较
while(key != arr[mid])
{
if (key > arr[mid])
min = mid +1;
else
max = mid - 1;
if (min > max)
return -1;
mid = (min + max)/2;
}
return mid;
}
//方法三:折半第二种
//while的条件改变
public static int FindArry2(int[] arr,int key)
{
int min,max,mid;
min = 0;
max = arr.length-1;
//循环,查找中间值与要查找的值比较
while(min <= max)
{
mid = (min + max)>>1;
if (key > arr[mid])
min = mid +1;
else if(key<arr[mid])
max = mid - 1;
else
return mid;
}
return -1;
}
public static void main(String [] args)
{
int[] arr = {1,6,11,2,8,5,3,13};
int m = findarr(arr,3);
System.out.println("m=" + m);
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
int x = FindArry1(arr,13);
int y = FindArry2(arr,25);
System.out.println("查找13的结果x=" + x + "\n查找25的结果y=" + y);
}
}</span>