顺序查找与折半查找(二分查找)与递归折半查找

顺序查找:适用于所有数组,效率低

二分查找:使用与已序数组,效率高

一、顺序查找

#include <iostream>

using namespace std;

int sequential_search(int *arry, int size, int val)
{
	for (int i = 0; i < size - 1; i++)
	{
		if (arry[i] == val)
			return i;
	}

	return -1;
}

int main()
{
	int arry[10] = {1,3,4,5,2,0,8,9,6,7,};

	int res = sequential_search(arry,sizeof(arry)/sizeof(arry[0]),6);

	if (res < 0)
		cout << "没找到" << endl;
	else
		cout << "pos:" << res << endl;

	return 0;
}

二、二分查找

#include <iostream>

using namespace std;



//二分查找
int binary_search(int *arry, int num, int val)
{
	int left = 0, right = num - 1;
	
	while (left <= right)
	{
		int mid = (left + right) / 2;

		if (arry[mid] < val) left = mid +1;
		else if (arry[mid] > val) right = mid - 1;
		else if (arry[mid] == val) return mid;
	}

	return -1;
	
}



int main()
{

	int arry[11] = {1,2,3,4,5,6,7,8,9,10,11};

	int res = binary_search(arry,sizeof(arry)/sizeof(arry[0]),11);

	if (res < 0)
		cout << "没找到" << endl;
	else
		cout << "pos:" <<res<< endl;


	cout << endl << endl << endl;
	return 0;
}

三、递归二分法查找

#include <iostream>

using namespace std;

int binary_search_digui(const int arry[], int val, int left, int right)
{
	int mid = (left + right) / 2;

	while (left <= right)
	{
		if (val > arry[mid])  return binary_search_digui(arry, val, mid + 1, right);
		else if (val < arry[mid]) return binary_search_digui(arry, val, left, mid - 1);
		else return mid;
	}

	return -1;

}

int main()
{
	int arry[] = {0,1,2,3,4,5,6,7,8,9,10,11};

	int res = binary_search_digui(arry,10,0,11);

	if (res < 0)
		cout << "没找到" << endl;
	else
		cout << "找到了,pos:" << res << endl;

	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_40204595/article/details/106314354