ruby版二分查找


def sortArr(arr)
  1.upto(arr.length-1) do |i|  
    (arr.length-i).times do |j|  
      if arr[j] > arr[j+1]  
        arr[j],arr[j+1] = arr[j+1],arr[j]  
      end  
    end  
  end  
  return arr  
end

def getIndex(arr,num,s=0,e=arr.size)
  
   if s > e
    return -1
  elsif s == e
    return arr[s] == num ? s : -1
  end
  
  cIndex = 0
  current = 0
  if (e +1 - s)  % 2 == 0
    cIndex = (s+e)/2
    current =  arr[cIndex]
  else
    cIndex = (s+e)/2+1
    current =  arr[cIndex]
  end
  
  if current == num
    return arr.index(current)
  else
    if current > num
      return getIndex(arr,num,s,(cIndex-1))
    else
      return getIndex(arr,num,(cIndex+1),e)
    end
  end
  
end 

number = 9
arr = [1,4,5,7,9,2,4,6,8,0,4,10]
index = getIndex(sortArr(arr),number)
puts "#{number} 在數組中的索引 => #{index}" 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章