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

(13)数组操作:遍历、输出最大值、冒泡排序、选择排序,java已有的排序方法、折半查找

2017-07-05 08:56 821 查看
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐