資料結構 折半查詢 swift的版本

liangtongzhuo發表於2017-12-14

之前都是那c 或 c++ 寫, 用swift 寫一下 。

  • 折半查詢 限制 是必須是有序的數字, 每次 查詢都減少一半。

            func BinarySearch(data:[Int],x:Int) -> (Int){
                  var min:Int
                  var beg:Int = 0
                  var size:Int = data.count
                  
                  while beg <= size {
                      min = (beg+size)/2//取中間值
                      
                      ///如果相等 返回
                      if x == data[min] {
                      
                          return min
                      }
                      
                      ///如果在前面,修改size的位置
                      if x < data[min]{
                          
                          size = min-1
                      ///如果在後面,beg 的位置
                      }else if x > data[min]{
                          
                          beg = min+1
                      
                      }
                      
                  }
                  
                  return -1
              }
    
              let a:[Int] = [1,2,3,4,5,6,7,8]
    
              let p = BinarySearch(a, x: 8)
    
              print(p)
    複製程式碼
  • C++語言 版本, 遞迴比迭代效率低。 就寫迭代 int BinarySearch(int data[],int x,int size){ int mid;//中間值 int beg = 0;//開始的值

     while (beg<=size) {
      
      mid = (beg+size)/2;
      
      if (x == data[mid])
          return mid;
      
      if (x < data[mid]){
          size = mid - 1;
    
      }else if (x > data[mid]){
          beg = mid + 1;
      }
    
      }
    
       ///沒找到
      return -1;
    
     }
    
    
     int main() {
    
      int a[8] = {1,2,5,6,7,78,778,8888};
    
      int b = BinarySearch(a, 1, 8);
    
      std::cout<< b << std::endl;
    
      return 0;
    }
    複製程式碼

個人部落格: www.liangtongzhuo.com

相關文章