Google Apps脚本的二进制搜索算法

问题描述:

我必须在电子表格中进行搜索,第一列是没有@部分的电子邮件列表。例如Google Apps脚本的二进制搜索算法

aadb.asdf 
asdfsd.asdf 
asdfsad.asdfsdf 
asdfsdf.asdfsdf 

下面是我的二进制搜索代码:

function testSubmit() { 


    var email = "aadb.asdf"; 
    var s = SpreadsheetApp.openById("spreadsheetID"); 
    var sheet = s.getSheets()[0]; 
    var emailColumn = sheet.getRange(1,1, sheet.getLastRow()).getValues(); 

    var l1 = 0; 
    var h1 = Number(sheet.getLastRow()) - 1; 


    while(h1 >= l1) { 

    var middle = parseInt((l1 + h1)/2); 
    var item = emailColumn[middle][0].valueOf(); 
    Logger.log("Binary -> middle : " + middle + " data : " + emailColumn[middle][0]); 

    if(item == email) { 

    } 

    if(item.charAt(0) < email.charAt(0)) { 
     l1 = middle + 1; 
    } 

    if(item.charAt(0) > email.charAt(0)) { 
     h1 = middle - 1; 
    } 
    } 

} 

但我的脚本会被卡住,并给出了消息是下面的截图。

enter image description here

然而,当我运行线性搜索,它工作正常。我的脚本有问题吗?

for (var row in emailColumn) { 
    for (var col in emailColumn[row]) { 
    if(email == emailColumn[row][col]) { 
    Logger.log("row : " + row + " col : " + col + " data : " + emailColumn[row][col]); 
    } 
    } 
    } 
+1

显示的信息不是错误信息。等多少钱?你看过脚本执行记录吗? (请参阅https://developers.google.com/apps-script/troubleshooting)。 –

+1

附加的图像不是错误消息。 @Ruben是正确的。除此之外,你还收到其他消息吗?你的预期结果是什么?到目前为止,请尝试阅读[documentation](https://developers.google.com/apps-script/troubleshooting#debugging)。它讨论了一切,包括调试。 –

+0

我从来没有说过这是一个错误,但它不应该发生,因为二进制搜索应该比线性需要更少的时间。但在我的脚本中,线性搜索很快,而二进制似乎在某个时间点卡住了。我仔细检查我的脚本错误,但我没有看到任何 –

看看你的while语句......它可能是H1和L1在给定时刻都不再变化,因此它被卡在环。