两个数组A,B取差的绝对值的最小值,性能有待测试

本文介绍了一种算法,该算法通过希尔排序等技术对两个整数数组进行处理,以找到它们之间的最小差值。文章提供了详细的代码实现,并对关键步骤进行了注释说明。

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

public int smallestDifference(int[] A, int[] B) {
       //希尔排序数组B

       int step =50;
        if(B!=null && B.length>1){
            step = step/2;
            while(step>0){
                for(int i =step;i< B.length;i++){
                    int key = B[i];
                    int j;
                    for(j=i-step;j>=0 && j<B.length; ){
                        if(key<B[j]){
                            B[j+step]=B[j];
                            j =j-step;
                        }else{
                            break;
                        }
                    }
                    B[j+step]=key;
                }
                step = step/2;
            }
        }
        //取最中间的2个数
        int tmp = Integer.MAX_VALUE;
        for(int i=0;i<A.length;i++){
            int round =0;
            int left =0;
            int right = B.length-1;
            int mid=0;
             while (left <= right) {
                          mid = (left + right) / 2;
                         if (A[i] < B[mid]) {//i在左边
                             right = mid - 1;
                             round =1;
                         } else if (B[mid] < A[i]) {//i在右边
                             left = mid + 1;
                             round =2;
                         } else {
                             round =0;
                             break;
                        }
                    }
             if(round ==0) {
                 tmp =0;
                 break;
             }
             if(round ==1) {
                int tmp1 = Math.abs(A[i]-B[mid]);
                int tmp2 = Math.abs(A[i]-B[mid>0?mid-1:mid]);
                int    tmp3 = tmp1>tmp2?tmp2:tmp1;
                tmp = tmp>tmp3?tmp3:tmp;
             }
             if(round ==2) {
              int tmp1 = Math.abs(A[i]-B[mid]);
              int tmp2 = Math.abs(A[i]-B[mid<B.length-1?mid+1:mid]);
              int tmp3 = tmp1>tmp2?tmp2:tmp1;
              tmp = tmp>tmp3?tmp3:tmp;
             }
        }
        return tmp;

    }

转载于:https://my.oschina.net/u/586094/blog/1619760

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值