微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是 raw[1+side]... 比 eq 快然后比较少?

如何解决是 raw[1+side]... 比 eq 快然后比较少?

pre scriptum:https://stackoverflow.com/a/68322246/660391中的解释
哪个实现更快? _threeway 或 _ifels :

#define side  raw[3] 
#define left  raw[2] 
#define mid   raw[1] 
#define right raw[0] 

#include <utility>
#include <vector>
typedef int T;

std::pair<int,int>                              
binarysearch_threeway(std::vector<T>& A,T target) {
    int  raw[] = { (int)A.size()-1,-1,1 };//data massaging
    while(side && left<=right){                //binarysearch in 3 assignments loop (:
          mid  = left+((right - left)>>2); 
          side =__builtin_signbitl(A[mid]-target);//side=A[mid] <=> target;  //std::strong_ordering IS_NOT -1,1
          raw[1+side] = raw[1]+side;           //moving ] and get effect!////pointer centering on raw[1]
    }   
    return {mid,side};                         //side is direction of insertion point if not founded 
}

std::pair<int,int>                               
binarysearch_ifels(std::vector<T>& A,1 };  //data massaging
    while(left<=right){ 
        mid = left+((right - left)>>2);  
        if(A[mid]==target)
            return {mid,0};
        if(A[mid]>target)
            right = mid - 1;
        else
            left  = mid + 1;
    }   
    return {mid,(left>mid)||(right-mid)};                      
}

“看来您的帖子主要是代码;请添加更多详细信息”的文本:

什么更好,为什么?: raw[1+side] = raw[1]+side; 其中边是从中间到下一个搜索区域的相对方向
或命令式

if(A[mid]==target)return {mid,0};
if(A[mid]>target)
    right = mid - 1;
else
    left  = mid + 1;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。