Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 按升序将元素正确放置在数组中_Arrays_Sorting_Binary Search_Solidity - Fatal编程技术网

Arrays 按升序将元素正确放置在数组中

Arrays 按升序将元素正确放置在数组中,arrays,sorting,binary-search,solidity,Arrays,Sorting,Binary Search,Solidity,我使用的是一种非常基本的图灵完整语言,没有其他语言(如JavaScript中的find)提供的奇特的原型数组函数。我还必须使这个放置函数尽可能多地生成循环或递归(这在实体中是允许的),因为这个过程使用的是一种叫做“gas”的东西,它是加密货币的一小部分 基本上,我必须将一个元素正确地放置在升序数组中,以便它前面的元素更小,前面的元素更大。如果我试图放置的元素等于找到的元素,那么只需返回该元素的位置。我不希望在这个数组中有太多的元素,永远不会超过1000个,但即使是100个元素和整整100次迭代都

我使用的是一种非常基本的图灵完整语言,没有其他语言(如JavaScript中的
find
)提供的奇特的原型数组函数。我还必须使这个放置函数尽可能多地生成循环或递归(这在实体中是允许的),因为这个过程使用的是一种叫做“gas”的东西,它是加密货币的一小部分

基本上,我必须将一个元素正确地放置在升序数组中,以便它前面的元素更小,前面的元素更大。如果我试图放置的元素等于找到的元素,那么只需返回该元素的位置。我不希望在这个数组中有太多的元素,永远不会超过1000个,但即使是100个元素和整整100次迭代都是非常昂贵的,因为所有的查找成本都是用户端的,所以尽可能提高效率对我有利

我了解排序算法,但我们在这里使用的是一个预排序数组,因为将添加到此数组中的每个元素都将随着时间的推移逐个排序。现在,我想到的是,我不知道它的名字,将数组长度除以一半,做一个条件运算;将它与下一个值或下一个值进行比较,然后将除法除以或乘以它的值的一半,然后再次检查相邻值,然后将除法乘以或除以它的一半,以此类推,直到得到正确的值

这样行吗?这叫什么

供参考

function FindSpotinArray(uint256 price,
    uint256 divisionVariable, 
    uint256[] priceArray) returns (uint256) {
    if(price < priceArray[x] && priceArray != priceArray[x]) {
        divisionVariable * 2;
        var x = priceArray / divisionVariable;
    } else if (price > priceArray[x] && priceArray != priceArray[x]) {
        divisionVariable / 2;
        var x = priceArray / divisionVariable;
    } else if (price == priceArray[x]) {
        return x;
    } else if (priceArray[x - 1] <= priceArray[x] <= priceArray[x + 1]) {
        return x;
    }
}
函数FindSpotinArray(uint256价格,
uint256变量,
uint256[]价格数组)返回值(uint256){
if(pricepriceArray[x]&&priceArray!=priceArray[x]){
分区变量/2;
var x=价格数组/分区变量;
}else if(price==priceArray[x]){
返回x;

}如果调用了(priceArray[x-1],则在分配它之前,您正在使用
x
。是的,此代码远未完成,谢谢您的回答。