Arrays 搜索不同整数的交换排序数组

Arrays 搜索不同整数的交换排序数组,arrays,algorithm,search,computer-science,divide-and-conquer,Arrays,Algorithm,Search,Computer Science,Divide And Conquer,上下文:如果存在一些k,则称为交换排序的由不同整数组成的数组A[1..n], 1.≤ K≤ n、 所以移动最后一个n− A的k个元素(按它们在A中出现的顺序)在 一个数组的前k个元素生成一个排序数组。(请注意,不同整数的排序数组是交换排序的: 另外,交换排序数组必须按递增顺序排列 示例:[4,5,6,1,2,3]=>将[1,2,3]向前移动到[1,2,3,4,5,6],这被视为交换排序。 (递增顺序) 非示例:[3,2,1,6,5,4]=>将[6,5,4]移动到前面,以获得[6,5,4,3,2,

上下文:如果存在一些k,则称为交换排序的由不同整数组成的数组A[1..n], 1.≤ K≤ n、 所以移动最后一个n− A的k个元素(按它们在A中出现的顺序)在 一个数组的前k个元素生成一个排序数组。(请注意,不同整数的排序数组是交换排序的: 另外,交换排序数组必须按递增顺序排列

示例:[4,5,6,1,2,3]=>将[1,2,3]向前移动到[1,2,3,4,5,6],这被视为交换排序。 (递增顺序)

非示例:[3,2,1,6,5,4]=>将[6,5,4]移动到前面,以获得[6,5,4,3,2,1],自降序后不被视为交换排序

我需要一个算法搜索(A,x),给定一个不同整数A和an的交换排序数组 整数x,返回索引i,1≤ 我≤ n、 如果存在这样的索引,则A[i]=x;如果没有,则返回0 索引存在

算法应该在O(logn)时间内运行,其中n是A的长度

有人知道怎么做吗?分而治之显然是一种方法,我就是想不出步骤。

函数findHelper(leftIndex,righindex,arr,el){
function findHelper(leftIndex, rightIndex,arr, el){

   var left=arr[leftIndex]
   var right=arr[rightIndex]
   var centerIndex=Math.round((leftIndex+rightIndex)/2)
   var center=arr[centerIndex]
   console.log(leftIndex+":"+rightIndex)
   if(right==el){
     return rightIndex
   }
   if(left==el){
     return leftIndex
   }
   if(center==el){
     return centerIndex
   }
   if(Math.abs(leftIndex-rightIndex)<=2){ // no element found
     return 0;
   }

   if(left<center){  //left to center are sorted
     if(left<el && el<center){
       return findHelper (leftIndex, centerIndex, arr, el)
     }
     else{
       return findHelper (centerIndex, rightIndex, arr, el)
     }
   }
      else if(center<right){//center to right are sorted
        if(center<el && el<right){
          return findHelper (centerIndex, rightIndex, arr, el)
        }
     else{
       return findHelper (leftIndex, centerIndex, arr, el)
     }
   }

}

function find(el, arr){
  return findHelper(0, arr.length-1, arr,el)+1
}

// some testcases
console.log(find(1, [1,2,5,8,11,22])==1)
console.log(find(2, [1,2,5,8,11,22])==2)
console.log(find(5, [1,2,5,8,11,22])==3)
console.log(find(8, [1,2,5,8,11,22])==4)
console.log(find(11, [1,2,5,8,11,22])==5)
console.log(find(22, [1,2,5,8,11,22])==6)

console.log(find(11, [11,22, 1,2,5,8])==1)
console.log(find(22, [11,22, 1,2,5,8])==2)
console.log(find(1, [11,22, 1,2,5,8])==3)
console.log(find(2, [11,22, 1,2,5,8])==4)
console.log(find(5, [11,22, 1,2,5,8])==5)
console.log(find(8, [11,22, 1,2,5,8])==6)
var left=arr[leftIndex] var right=arr[rightIndex] var centerIndex=Math.round((左索引+右索引)/2) var center=arr[centerIndex] log(leftIndex+:“+rightIndex) 如果(右==el){ 返回右索引 } 如果(左==el){ 返回左索引 } 如果(中心==el){ 返回中心索引 } if(Math.abs(leftIndex-righindex)
函数findHelper(leftIndex,righindex,arr,el){
var left=arr[leftIndex]
var right=arr[rightIndex]
var centerIndex=Math.round((左索引+右索引)/2)
var center=arr[centerIndex]
log(leftIndex+:“+rightIndex)
如果(右==el){
返回右索引
}
如果(左==el){
返回左索引
}
如果(中心==el){
返回中心索引
}

如果(Math.abs)你能提供一些例子吗?可能重复的你能提供一些例子吗?可能重复的