|
发表于 2015-3-17 22:26:14
|
显示全部楼层
RE: 折半查找法(迭代实现)
强烈支持楼主ing……
用迭代实现了一下:
- #include <stdio.h>
- #include <stdlib.h>
- int bin_serach(int str[], int n, int key)
- {
- int low, mid, high;
- low = 0;
- high = n - 1;
- while(low <= high)
- {
- mid = (low + high)/2;
- if (str[mid] == key)
- {
- return mid;
- }
- else if (str[mid] < key)
- {
- low = mid + 1;
- }
- else {
- high = mid - 1;
- }
- }
- return -1;
- }
- int getAddr(int str[], int key, int low, int high)
- {
- if (low > high)
- return -1;
- int mid = (low + high) / 2;
- if (key == str[mid])
- return mid;
- if (str[mid] < key)
- {
- low = mid + 1;
- }
- else if (str[mid] > key)
- {
- high = mid - 1;
- }
- return getAddr(str, key, low, high);
- }
- int main()
- {
- int str[11] = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89};
- int n, addr;
- printf("请输入要查询的数字:");
- scanf("%d", &n);
- //addr = bin_serach(str, 11, n);
- addr = getAddr(str, n, 0, 11);
- if (-1 != addr)
- {
- printf("查找成功,查询数字%d所在的位置是:%d\n", n, addr);
- }
- else
- {
- printf("查找失败");
- }
- return 0;
- }
复制代码 |
|