查找

顺序查找

基本思想:从数组的首元素开始,将元素逐个与待查找的关键字进行比较,直到找到相等的为止。若整个数组中没有与待查找元素相等的元素,则查找不成功。时间复杂度 $ O(n)$。

int seqSearch(int a[], int n, int key)
{
	for(int i = 0; i < n; i++)
	{
		if(a[i] == key)
			return i;
	}

	return -1;
}

折半查找

适用于在一个元素排列有序的数组中进行查找。
基本思想:对于已排序的序列,经过一次比较后,可将序列分割成两部分,然后只在有可能包含待查找元素的一部分中继续查找,,并根据试探结果继续分割,逐步缩小查找范围,直至找到或找不到为止。

int binarySearch(int a[], int n, int key)
{
	int low = 0;
	int high = n - 1;

	while(low <= high)
	{
		int mid = (low + high) / 2;
		if(key == a[mid])
			return mid;
		else if(key < a[mid])
			high = mid - 1;
		else
			low = mid + 1;
	}

	return -1;
}
原文地址:https://www.cnblogs.com/huerxiong/p/10633148.html