c語言實現二分查找法代碼


二分查找

也稱為折半查找

是一種比較高效的查找方法

但是,它有個前提

就是

查找的序列一定要是有序的

查找的序列一定要是有序的

查找的序列一定要是有序的
.
.
.

代碼測試

#include <stdio.h>

// 二分查找法
bool search_key(int *src, int size, int key)
{
	int low = 0;				// 起始位置
	int high = size - 1;        // 結束位置
	int mid = (low + high) / 2; // 中間位置
	int count = 0;              // 查找花費的次數

	while (low < high) {
		++count;
		mid = (low + high) / 2;

		if (key < src[mid]) {
			if (key == src[low]) { // 找到啦
				printf("查找 %d 成功!\t位置是 src[%d] = %d, \t共查找 %d 次\n", src[low], low, src[low], count);
				return true;
			}
			high = mid - 1;
		}
		else if (key > src[mid]) {
			if (key == src[high]) { // 找到啦
				printf("查找 %d 成功!\t位置是 src[%d] = %d, \t共查找 %d 次\n", src[high], high, src[high], count);
				return true;
			}
			low = mid + 1;
		}
		else if (key == src[mid]) { // 找到啦
			printf("查找 %d 成功!\t位置是 src[%d] = %d, \t共查找 %d 次,\n", src[mid], mid, src[mid], count);
			return true;
		}

	}
	printf("查找完畢!未能找到相對應的值!\n");
	return false;
}

// 主函數
int main(int argc, char **argv)
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	search_key(arr, sizeof(arr) / sizeof(int), 0);
	search_key(arr, sizeof(arr) / sizeof(int), 1);
	search_key(arr, sizeof(arr) / sizeof(int), 2);
	search_key(arr, sizeof(arr) / sizeof(int), 3);
	search_key(arr, sizeof(arr) / sizeof(int), 4);
	search_key(arr, sizeof(arr) / sizeof(int), 5);
	search_key(arr, sizeof(arr) / sizeof(int), 6);
	search_key(arr, sizeof(arr) / sizeof(int), 7);
	search_key(arr, sizeof(arr) / sizeof(int), 8);
	search_key(arr, sizeof(arr) / sizeof(int), 9);
	search_key(arr, sizeof(arr) / sizeof(int), 10);
	return 0;
}

調試結果

可以看到,最少查找 1 次,最多查找 3 次

可見比遍歷要高效的多

_End

完事兒


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM