(13)数组操作:遍历、输出最大值、冒泡排序、选择排序,java已有的排序方法、折半查找
1.数组遍历
/*
* 获取数组中元素,遍历
*/
int []y=new y[3];
for(int i=0;i<y.length;i++) //数组名.length获取数组长度,其他不能用数组名.调用
{
System.out.println("y["+i+"]="+y[i]+";");
}
2.打印数组名,就是打印数组地址,输出格式[数组数据类型@数组首地址(哈希地址)System.out.println(y); 输出:[I@15db9742
3.输出数组最大值
/*
* 需求:获取数组中的最大值
*/
public int MaxArr(int[] a) {
int max=a[0];//存放最大值
for(int i=0;i<a.length;i++) {
if(a[i]>max) {
max=a[i];
}
}
return max;
}
/*
*调用MaxArr()方法,不能用数组名.,而是要用类对象.
*/
int[] arr= {10,5,9,45,2,47};
Demo d=new Demo();
int temp=d.MaxArr(arr);
System.out.println("arr数组的最大值:"+temp);
4、冒泡排序
/*
* 对给定的数组排序
* 思路:冒泡排序
* 1.外层控制进行的次数
* 2.内层来求剩余数组中的最大值
* 3.对冒泡排序优化:当某次没有数组交换时,则说明未排序数组有序,不用再比较
*/
public void busort(int a[]) {
int flag=0;
for(int i=a.length-1;i>0;i--) {
flag=0;//每次比较前,置为0
for(int j=0;j<i;j++) {
if(a[j]>a[j+1]) {
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
flag=1;//有比较,则置1
}
}
count++;
if(flag==0) {
break;//说明某次中没有调换顺序,则说明已有序
}
}
}
Demo d=new Demo();
调用: d.busort(arr); System.out.println("冒泡排序后数组数据从小到大输出如下:"); d.prinArr(arr);调用图示:
5.选择排序
/*
* 选择排序:
* 思路:
* 1.每次让未排序的第一个元素当最小值,对后面的依次比较,从而确定最小值,放在
* 这次未排序元素的第一位中。
* 2.其中涉及两个元素位置交换问题
*
*/
public void Sort(int a[]) {
int min;
int temp;
for(int i=0;i<a.length;i++) {
int index=i;
min=a[i];
for(int j=i;j<a.length;j++) //找到最小值和最小值下标
{
if(a[j]<min) {
min=a[j];
index=j;
}
}
temp=a[index];
a[index]=a[i];
a[i]=temp;
}
}JAVA已经对数组排序功能实现集成了方法Arrays.sort(数组名);即可实现对数组数据从小到大排序
六、数组折半查找
/*折半查找的前提是有序
* 折半查找数组中关键字,并返回数组下标
*
*/
public int midSelect(int a[],int key) {
int low,high,mid;
low=0;
high=a.length-1;
mid=(low+high)/2;
while(a[mid]!=key&&low<=high)//low>high则是不存在该值的情况 。若有该数,则a[mid]=key
{
if(a[mid]>key) //在mid左面比较
{
high=mid-1;
}
else if(a[mid]<key)//在mid右面比较
{
low=mid+1;
}
mid=(low+high)/2;//下一次判断是否够该数做准备
}
low可以作为向有序数组插入数据的位置(画图理解)
//返回下标或者-1
if(a[mid]==key) {
return mid;}
else
return -1;
浙公网安备 33010602011771号