是 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 (将#修改为@)