(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;





















posted @ 2017-07-05 08:57  测试开发分享站  阅读(174)  评论(0)    收藏  举报