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