之前都是那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