java 数组之间的比较,2017年计算机二级考试java章节辅导:数组元素间的比较

本文介绍了Java中数组元素的访问、求值、最小值、平均值的计算,以及冒泡排序算法的实现。通过示例代码详细展示了如何使用Scanner类读取数组元素,以及如何实现数组的升序排序。此外,还讨论了线性查找和二叉查找两种数组元素查找方法,强调了不同查找方法的时间复杂度和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5e34878189ce076e5746f19946006a98.png

5.1.6 数组元素间的比较

了解了数组元素的访问后,我们可以利用数组元素的遍历实现很多功能。

1.数组值、最小值和平均值

利用for循环遍历 数组的所有元素可以非常方便的求出数组的值、最小值和平均值。

[例5-5]]求出一个数组的值、最小值、平均值

import java.util.Scanner;

class Array {

//计算数组元素值

public int getMax(int[] a){

int max=a[0];

for(int i=0;i

}

}

return max;

}

//计算数组元素最小值

public int getMin(int[] a){

int min=a[0];

for(int i=0;iif(min>a[i]){

min=a[i];

}

}

return min;

}

//数组元素求和

public int getSum(int[] a){

int sum=0;

for(int i=0;isum+=a[i];

}

return sum;

}

//计算数组元素平均值,调用getSum方法

public double getAverage(int[] a){

double avg;

//因为getSum(a)和a.length都是int类型,有了(*1.0)后可以使两个int类型的值按double计算

avg=getSum(a)*1.0/a.length;

return avg;

}

}

public class Test5_5{

public static void main(String args[]){

//Sanner类是一个输入类,用于整数、实数、字符串等的输入

Scanner scan = new Scanner(System.in);

int[] a= new int[10];//初始化数组a

System.out.println("请连续输入10个整数");

//利用Scanner的 nextInt方法从键盘输入10个数

//使用a.length的方式,避免数组下标越界异常的发生

for(int i=0;iSystem.out.print("第"+(i+1)+"个整数:");

a[i]=scan.nextInt();

}

Array myArray = new Array();

System.out.println("数组的值为:"+myArray.getMax(a));

System.out.println("数组的最小值为:"+myArray.getMin(a));

System.out.println("数组的和为:"+myArray.getSum(a));

System.out.println("数组的平均值为:"+myArray.getAverage(a));

}

}

这里我们将对数组元素所做操作集中在一个类Array中实现,在需要使用这些方法的时候只要生成类Array的类对象,通过该类对象就可以调用这些方法了。而不是将这些方法放到主类中实现,直接通过主类的main方法调用。这是一种良好的编程习惯,便于代码复用,应予以提倡。

程序中使用到了Scanner类,下面予以介绍。

Scanner scan = new Scanner(System.in);

定义一个Scanner类的类对象,在定义过程中,Scanner有多个构造方法,这里我们使用的是其中一个,传递的参数System.in是标准输入,即从键盘输入。scan.nextInt()表示从键盘上读入一个整数,除此之外,Scanner还支持doble,float等数据类型数据的读入,分别对应方法nextDouble(),nextFloat()。

表5-1 Scanner类的常用方法

方法

说明

public int nextInt()

获取一个int型整数

public long nextLong()

获取一个long型整数

public foloat nextFloat()

获取一个单精度实数

public double nextDouble()

获取一个双精度实数

public String next()

获取一个字符串

利用表5-1中的方法可以实现多种数据类型数组的读取,特别注意,方法next的返回值是String类型。

2.数组的排序

数组中集中了多个数据类型相同的元素,为了更好的对数组元素操作,有时候对数组排序是比不可少的,因此,下面我们讨论如何对数组排序。排序算法在数据结构中有多个,这里算法不是我们讲解的重点,我们选择其中一种:冒泡排序(排序后元素值递增)进行讲解。

冒泡排序的关键点是从后向前对相邻的两个数组元素进行比较,若后面元素的值小于前面元素的值,则让两元素交换值;否则,不进行交换。依次遍历所有元素,这样,第一趟排序后数组中的最小值就是下标为0的元素了,依次类推,我们进行第二趟排序(这时候我们无需遍历所有元素,因为数组下标为0的元素,其值已经是最小,我们只需遍历从除下标为0的所有元素),经过第二趟后,下标为1的数组元素存储的是数组中次小的值,这样对于有n个元素的数组,循环执行n-1趟后便可完成排序。当然,也可以从前向后对两个数组元素进行排序,但此时是较大者的值向后移。

[例5-6]

import java.util.Scanner;

class SortClass{

//对数组排序,arr:数组名

public void sort(int[]arr){

int temp;//交换值时作为临时变量

for(int i=0;ifor(int k=arr.length-1;k>i;k--){

if(arr[k]>arr[k-1]){//后者小于前者,需要交换两者的值

temp = arr[k];

arr[k]= arr[k-1];

arr[k-1]= temp;

}

}

paint(i+1,arr);//调用数组打印方法

}

}

//打印数组元素,用于排序时检测每趟的排序结果

//time:第几趟,arr:数组名

public void paint(int time,int[] arr){

System.out.print("\n第"+time+"趟排序:");

for(int i=0;iSystem.out.print(arr[i]+"\t");

}

}

}

public class Test5_6 {

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

int n=5;//数组元素个数

int[] arr= new int[n];

System.out.println("请从键盘上输入"+n+"个数:");

//利用Scanner的 nextInt方法从键盘输入10个数

for(int i=0;iSystem.out.print("第"+(i+1)+"个整数:");

arr[i]=scan.nextInt();

}

System.out.println("排序前数组元素值:");

for(int i=0;iSystem.out.print(arr[i]+"\t");

}

SortClass sc = new SortClass();//生成SortClass的类对象,用以调用sort方法

sc.sort(arr);//调用SortClass的sort方法

System.out.println("\n排序后数组元素值:");//字符串中的"\n"是换行操作

for(int i=0;iSystem.out.print(arr[i]+"\t");

}

}

}

运行结果如下:

请从键盘上输入5个数:

第1个整数:52

第2个整数:45

第3个整数:68

第4个整数:96

第5个整数:32

排序前数组元素值:

52 45 68 96 32

第1趟排序:96 52 45 68 32

第2趟排序:96 68 52 45 32

第3趟排序:96 68 52 45 32

第4趟排序:96 68 52 45 32

排序后数组元素值:

96 68 52 45 32

从结果中可以看出,经过sort方法处理后,数组元素按升序进行排列了,那么,是否可以让数组元素按从大到小顺序排序的,其实,只要改变判断条件“if(arr[k]>arr[k-1])”中的“>”为“

3.数组特定数据的查找从数组中查找

从数组中查找特定数据的最简单的办法是遍历数组中的所有元素,这种插好方法也称为线性查找。以下方法indexOf()用于查找arr数组中屈指为value的元素的索引位置,若找不到,返回-1。该方法采用的就是线性查找方式。

public int indexOf(int[] arr,int value){

for(int i=0;iif(arr[i]==value)

return i;//找到,返回对应下标

}//for循环执行完后,表示未找到,则返回-1

return -1;

}

线性查找的时间复杂度为O(n),它适用于小型数组或未排序的数组。对于大型数组,线性查找的效率比较低。如果数组已经排好序,那么我们可以采用高效的二叉查找算法。

二叉查找算法的中心思想史:查找数组中位于中间位置的元素,并将其与查找值进行比较,如果两者相等,就返回该数组元素的下标值;否则,将问题简化为查找已排序数组的一半元素——如果查找值小于数组的中间元素,就查找数组的前半部分,否则就查找数组的后半部分(假设数组按升序排序)。二叉查找的 时间复杂度是 O(log2n)。

例5-7给出了使用二叉查找算法的数组元素查找方法。

[例5-7]

class ArraySearch{

//使用二叉查找算法查找数组arr中值为value的数组元素下标,找不到返回-1

public int indexOf(int[] arr,int value){

int low=0;

int high=arr.length-1;

int middle;

while(low<=high){

middle=(low+high)/2;

if(arr[middle]==value){

return middle;

}

else

if(arr[middle]low=middle+1;

}

else{

high=middle-1;

}

}

return -1;

}

}

public class Test5_7 {

public static void main(String[] args) {

int[] arr={1,3,5,7,9,11,13};

ArraySearch as = new ArraySearch();

int index=as.indexOf(arr, 3);

System.out.println("3在数组arr中的下标位置为:"+index);

}

}

运行结果:(分找到、找不到两次实验)

找到:

3在数组arr中的下标位置为:1

找不到:(将查找的值改为:4)

4在数组arr中的下标位置为:-1

2829f2ca24f0d0090cbba57f30759f23.png

2017年计算机二级考试java章节辅导:数组元素间的比较.doc

下载Word文档到电脑,方便收藏和打印[全文共42224字]

编辑推荐:

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

下载Word文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值