c++二分查找
題目是在一些數字里找出一個數字,並輸出他在第幾行
代碼 + 注釋
#include <stdio.h>
#include<iostream>
using namespace std;
int mid;
int x;
void find(int a[],int low,int high)
{
while(low<=high)
{
mid = (low + high) / 2;
if(a[mid] == x)
break;
if(a[mid]<x)
low=mid+1;
else high=mid-1;
}
}
int main()
{
int a[10] = {1,3,6,8,9,11,23,59,60,99};
int low = 0,high = 9;
cout << "請輸入要查找的數字:";
cin >> x;
find(a,low,high);
if(low<=high)
cout<<"你要找的數字在第"<<mid + 1<<"位"<<endl;
else
cout<<"你要找的數字不存在"<<endl;
return 0;
}
總結
1)先算出中間的值mid
2)用要查找的值與mid比較,如果比mid小,那high = mid - 1,即將mid右邊的數刪除
3)如果查找的值比mid大,那么low = mid + 1,即將mid左邊的數刪除
4)重復2和3步,直到找到目標值或者left>right越界(即未找到)