您的位置:首页 > 编程语言 > Java开发

java基础二(数组)

2013-06-14 21:46 190 查看
数组

概念:同一种类型数据的集合,其实数组就是一个容器。

角标:数组自动给内部的元素编号,从0开始。

格式:

元素类型[] 数组名 =new 元素类型[元素个数];
元素类型[] 数组名 = new 元素类型[]{元素,元素,....} 简化为:元素类型[] 数组名 = {元素,元素.....}

一些类型有默认是:int:0;double:0.0,float:0.0f,boolean:false;

数组是作为实体存在的一个容器,存放在堆内存当中;而数组名是一个引用型变量仅仅指向这个容器而已。
数组属性:length,可以直接获取元素个数。

数组的操作
遍历:获取数组中的元素
int[] arr ={3,6,5,1,8,9,6,7};
for(int x=0;x<arr.length;x++)
{
//打印出数组中的元素,并以逗号隔开
System.out.print(arr[x]+",");

}


求最值:
获取最大值思路:
1,获取最值需要进行比较。每一次比较都会有一个较大的值。因为该值不确定。
通过一个变量进行临储。
2,让数组中的每一个元素都和这个变量中的值进行比较。
如果大于了变量的值,就用该变量记录较大值。
3,当所有的元素都比较完成,那么该变量中存储的就是数组中的最大值了。

步骤:
1,定义变量,把数组中任意一个值赋给这个变量。
2,通过循环语句对数组进行遍历。
3,在变量过程中定义判断条件,如果遍历到的元素比变量的元素打,就赋值给该变量;

需要定义一个功能来完成。以便提高复用性。
1,明确结果,数组中的最大元素,类型为int。
2未知内容:一个数组。int[]

元素的值比较
*/

public static int bijiao(int[] maxin)
{
int z = maxin[0];//直接把数组中角标为0的元素的值赋给变量z
for(int x = 1 ;x<maxin.length;x++)
{

//x=1,所以是用角标1的值和角标0的值比较大小
//比较后把最大的值赋给z。
if(maxin[x] > z)//那>换成<就是最小值
z = maxin[x];
}
return z;//最后比较后的结果。
}
//---------------------------------------------------------------------
/*
另一种思路:
把变量作为数组中的角标来赋值。

通过角标来比较,把角标的位置赋值给变量,而不是元素的值。
*/
public static int bijiao2(int[] maxin)
{
int z = 0;//0作为数组中一个角标。
for(int x = 1 ;x<maxin.length;x++)
{
if(maxin[x] > maxin[z])//判断数组中两个角标的值
z = x;//把值的角标赋值
}
return maxin[z];//最后比较后的结果。
}


排序:
class shuzup
{
//这两种排序性能低,效率低,代码简单。
//目的:1.明白排序的算法。2.应付面试。

//选择排序:
//依次从0角标和后面的所有元素比较,跟着到角标1和后面的所有元素比较,角标2...
//内循环结束一次,最值出现在头角标位置上。

public static void paixu(int[] dx)
{
for(int x = 0;x<dx.length-1;x++)//z<dx.length-1:循环到最后一个角标时不用比较,所以-1
{
for(int y=x+1;y<dx.length;y++)
{
//dx[x]>dx[y]是从小到大排序,dx[x]<dx[y]从大到小排序
if(dx[x]>dx[y])//不要加分号,不然后面三条语句不再归在if语句内。
{
//用第三方变量交换位置,不能直接赋值
int temp = dx[x];
dx[x] = dx[y];
dx[y] = temp;
//huanwei(arr,y,x)//利用函数
}
}
}
}

//-------------------------------------------------------------------
/*
冒泡排序:就是相邻两个元素比较大小,如果符合条件换位。
*/

public static void paixu2(int[] arr)
{
/*
另一种冒泡:
for(int x = arr.length;x>0;x--)
for(int y =0;y<x;y++)
*/

for(int x=0,;x<arr.lenth-1;x++,)
{
for(int y=0;y<arr.lenth-x-1;y++)
//内循环排序以后,最值换到最后一位,没必要再参与整个数组的相邻比较。
//所以要-x:让数组长度随着排序次数的递增而递减。
//-1:避免角标[y+1]位置越界。
{
if(arr[y]>arr[y+1])//从小到大排序。
{
//用第三方变量交换位置,不能直接赋值
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
//huanwei(arr,y,y+1)//利用函数
}
}
}

//--------------------------------------------------------------
//利用函数封装换位置功能
//发现无论什么排序都需要对满足条件的元素进行位置置换。
//所以可以把这部分相同的代码提取出来,单独封装成一个函数

public static void huanwei(int[] arr,int a,int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}

public static void shuzu(int[] arr)
{
{System.out.print("[");//让打印美观一点
for(int x=0;x<arr.length;x++)
{
if(x!=arr.length-1)//条件是表示判断角标位置是不是最后一个
{System.out.print(arr[x]+", ");}//打印出数组中的元素,并以逗号隔开
else
{System.out.println(arr[x]+"]");}//角标为最后一个时的输出
}
}
}
public static void main(String[] args)
{
int[] dx = {5,1,6,4,2,8,9};
//排序前打印数组
shuzu(dx);
//排序

//Arrays.sort(dx);//java定义好的一种排序方式。开发中,对数组进行排序,要使用该句代码。
paixu(dx);
//排序后打印数组
shuzu(dx);
}
}


折半查找:(数组必须是有序的)

class shuzucz
{
public static void main(String[] arge)
{
int[] sz = {23,45,234,654,765,3230};
int x = zheban(sz,4);
System.out.println("index="+x);
}
//折半查找:提高效率,但是必须要保证该数组是有序的数组。

public static int zheban(int[] arr,int key)
{
int min,max,mid;
min = 0;
max = arr.length-1;
mid=(min+max)/2;//中间值
while(key!=arr[mid])
{
//判断用key和中间值比较
if(key>arr[mid])
min = mid+1;//key比中间值大,所以查找从角标0移到中间+1位的位置
else if (key<arr[mid])
max = mid-1;//key比中间值小,所以查找从角标最后一位,移动到中间-1位的位置

mid =(max+min)/2;//每次循环都折半一次。

if(min>max)//每次折半后,当最小角标位移动超过最大角标位,或者最大角标位移动超过最小角标位时,表示数组查找完。没有要查找的元素。
return -1;
}
return mid;//key等于中间值
}
//------------------------------------------------------------------
//在一个有序的数组中插入一个数,还要保证这个数组是有序的。
public static int zheban2(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;//key比中间值大,所以查找从角标0移到中间+1位的位置
else if (key<arr[mid])
max = mid-1;//key比中间值小,所以查找从角标最后一位,移动到中间-1位的位置
else
return mid;//key等于中间值
}
return min;//返回最小角标的值,这个就是插入的位置。

//------------------------------------------------------------------
//折半查找:另外一种
public static int zheban2(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;//key比中间值大,所以查找从角标0移到中间+1位的位置
else if (key<arr[mid])
max = mid-1;//key比中间值小,所以查找从角标最后一位,移动到中间-1位的位置
else
return mid;//key等于中间值
}
return -1;
}
//------------------------------------------------------------------
//插入位置
public static int zheban2(int[] arr,int key)
int min,max,mid;
min = 0;
max = arr.length-1;
while

//------------------------------------------------------------------
//定义功能,获取key第一次出现在数组中的位置。
public static int chazhao(int[] arr,int key)
{
for(int x =0;x<arr.length;x++)
{
if(arr[x]==key)
return x;
}
return -1;//由于角标位都是从0开始,都是整数,所以返回-1表示没找到。

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: