二分查找 C++

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

int binarySearch(int arr[],int len,int data)
{
	int left = 0;
	int right = len;
	int mid = 0;
	while (left<=right)
	{
		//mid = (right + left)/2; 會有bug
		//數組過大時 right+left 超出了int的範圍 使得結果爲負數 超出數組界限
		//也可以寫成 mid = left + ((right - left)>>>1);			>>>:無符號右移
		mid = left + (right - left) / 2;
		if (data < arr[mid])
		{
			right = mid - 1;
		}
		else if (data > arr[mid])
		{
			left = mid + 1;
		}
		else
		{
			return mid;
		}
	}
	return -1;
}

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10};
	int len = size(arr);
	int index = binarySearch(arr, len-1,20);
	if (index>=0)
	{
		cout << "the data index is:" << index << endl;
	}
	else
	{
		cout << "the data is not found!" << endl;
	}
	system("pause");
	return EXIT_SUCCESS;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章