使用c语言指针和递归方法实现二分查找
2014-04-02 21:48
796 查看
使用c语言指针和递归方法实现二分查找,符输入语句与打印语句。
#include<stdio.h> //binary search init int binsearch(int low, int height, int *ptr, int); int main(){ int i = 0; int arr[10]; int *ptr=arr; for(i=0;i<10;i++) scanf("%d",arr+i); printf("the input data is:\n"); for(i=0;i<10;i++) printf("%d",arr[i]); printf("\n开始折半查找\n"); printf("\n输入要查找的数\n"); int m; scanf("%d",&m); int j; j = binsearch(0,9,ptr,m); printf("\n*ptr=%d,j=%d\n",*ptr,j); return 0; } int binsearch(int low,int height, int *ptr, int value){ if (ptr == NULL || low > height) return -1; printf("\nlow=%d,height=%d,\n",low,height); if(*(ptr+low) == value) { ptr+=low; return low;} if(*(ptr+height) == value) { ptr+=height; return height;} if(low == height){ printf("low==height = %d",low); if(*(ptr+low) == value) { ptr+=low; return low;} else return -1; } int mid = (low + height) / 2; int result; printf("\nlow=%d,height=%d,mid=%d\n",low,height,mid); printf("*(ptr+mid)=%d,value=%d",*(ptr+mid),value); // 还得防止当查所的值不存在时,由于递归引起的无限循环 if(*(ptr+mid) == value) { printf("return mid = %d",mid); ptr+=mid; return mid; } else if(*(ptr+mid) > value) {return binsearch(low,mid-1,ptr,value);} else {return binsearch(mid+1,height,ptr,value);} return -1; }
相关文章推荐
- 使用递归和非递归两种方法实现二分查找!!!
- java使用递归和非递归实现二分查找
- [整理]二分查找搜索算法原理及递归,迭代方法实现
- C语言数据结构中二分查找递归非递归实现并分析
- 使用C语言递归与非递归实现字符串反转函数char *reverse(char *str)的方法
- c语言简单递归/非递归实现二分查找
- C语言经典算法(九)——递归实现二分查找的两种方法
- c语言使用指针实现模拟java/c# string.concat字符串串联方法
- 使用递归方法实现数字反转 C语言实现
- 二分查找的递归和非递归算法(C语言实现)
- C语言:递归和非递归实现二分查找
- C语言使用stdlib.h库函数的二分查找和快速排序的实现代码
- 编写查找一个单链表特定元素的程序。分别使用递归和非递归方法实现,并比较它们的运行时间。
- c语言利用递归实现二分查找
- C语言实现 二分查找数组中的Key值(递归和非递归)
- C语言 ---- 递归实现二分查找
- C语言中使用指针实现数组排序
- C语言实现数组二分查找与顺序查找
- C语言实现直接插入排序,冒泡排序以及二分查找(巩固理解记忆)
- 用递归实现二分查找 JAVA