关于java的数组求最大值、最小值、排序、二分查找程序总结

package org.wubo.test;
//_____________________________________________________________________________________
public class Demo {
    
    public static void main(String[] args) {
        int[] intarr={55,53,30,22,16,12,10,5,4};
        int h=intarr.length;
        int l=0;
        ArrayOperate Arr=new ArrayOperate();
        System.out.println(Arr.mymax(intarr));
        System.out.println(Arr.mymin(intarr));
        Arr.bS(intarr, l,h,31);
        //1二分查找
        System.out.println(Arr.erfenWhile(intarr,21 ));
        //输出冒泡排序
        System.out.println("冒泡排序方法:");
        Arr.maopao(intarr);
        //输出选择排序
        System.out.println();
        System.out.println("选择排序方法:");
        Arr.xuanze(intarr);
        
        
        
    }
}
//_____________________________________________________________________________________

/*1.编写一个类
 * 2.实现选择排序
 * 3.实现冒泡排序
 * 4.实现二分查找
 * 5.实现递归查找
 * 6.换位置操作
 * 7.求最大值
 * 8.求最小值
 * */
class ArrayOperate{
    //1.数组遍历
        public void read(int[] arr){
            for(int i=0;i<arr.length;i++){
                System.out.print(arr[i]+" ");
            }
        }
        //2.实现求最大值
        public String mymax(int[] arr){
            
            int max=arr[0];
            for(int i=0;i<arr.length;i++){
                if(arr[i]>max){
                    max=arr[i];
                }
            }
            return "数组的最大值为:"+max;
        }
        //3.求数组最小值
        public String mymin(int[] arr){
                
                int min=arr[0];
                for(int i=0;i<arr.length;i++){
                    if(arr[i]<min){
                        min=arr[i];
                    }
                }
                return "数组的最小值为:"+min;
            }
        //4.交换方法
                public static void swap(int[] arr,int a,int b){
                    int temp=arr[a];
                    arr[a]=arr[b];
                    arr[b]=temp;
                }
        //5.数组排序冒泡
        public void maopao(int[] arr){
        for(int i=0;i<arr.length-1;i++){
            for(int j=0;j<arr.length-1-i;j++){
                if(arr[j]>arr[j+1]){
                swap(arr,j,j+1);    
                }
            }
        }
        read(arr);
    }
        //6.数组排序选择
        public void xuanze(int[] arr){
        for(int i=0;i<arr.length-1;i++){
            for(int j=i+1;j<arr.length;j++){
                if(arr[j]<arr[i]){
                    swap(arr,j,i);    
                }
            }
        }
        read(arr);
        }
        //7.二分查找while方式
        public String erfenWhile(int[] arr,int i){
            int right=arr.length-1;
            int left=0;
            int mid;
            mid=(left+right)/2;
            if(arr[left]<i||arr[right]>i){
                return"-1";
            } else{
            while(left<right){
                if(arr[mid]<i){
                
                    right=mid-1;
                    
                }
                if(arr[mid]>i){
                    left=mid+1;
                    
                }
                mid=(left+right)/2;
                
            }
            if(arr[mid]==i){
                return "要查找的元素"+i+"在数组中的第个"+(mid+1)+"位置";
            }else{
                System.out.println(arr[mid]);
                if(i>arr[mid]){
                    if(arr[mid-1]-i>i-arr[mid]){
                        System.out.println("最近的数为:"+arr[mid]);
                        return "-2";
                    }else{
                        System.out.println("最近的数为:"+arr[mid-1]);
                        return "-1"; 
                    }
                }else{
                if(arr[mid]-i>i-arr[mid+1]){
                    System.out.println("最近的数为:"+arr[mid+1]);
                    return "-2";
                }else{
                    System.out.println("最近的数为:"+arr[mid]);
                    return "-1"; 
                }
                }
            }
            
                        
        }
    }
        //8.递归查找位置
        public  void bS(int[] a, int low, int hig, int key) {

            int mid = (low + hig) / 2;
            // 二分法的要求是数组一开始就是排序好的   
            if (low > hig) {//说明两个下标往中间走 相互错过了,就表示没有找到这个key
            System.out.println("没有这个数");
            return;//直接return一下,为了不报StackOverflowError
            }
            if (a[mid] == key) {//要是找到直接打印即可
            System.out.println("找到下标为" + mid);
            return;
            } else if (a[mid] >key) {//表示待查找的key在数组的右边,中间的mid对象的元素的值肯定不等于key
            bS(a, mid + 1, hig, key);
            } else {//表示待查找的key在数组的左边,中间的mid对象的元素的值肯定不等于key
            bS(a, low, mid - 1, key);
            }
            }
        
         
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值