一、Review
08【C语言&趣味算法】再识:冒泡排序(问题分析、算法设计与分析、程序流程图以及完整代码)
07【c语言&趣味算法】最佳存款方案(采用从后往前递推解决)
06【c语言&趣味算法】牛顿迭代法求方程根(可回看)
05【C语言&趣味算法】经典:兔子产子问题(即:Fibonacci数列)
04【C语言&趣味算法】“抓交通肇事犯"问题。算法改进:设置“标识变量”,有效减少循环次数。
03【C语言&趣味算法】(值得品味的一道题)打鱼还是晒网?结构体的简单应用。函数的应用。判断闰年的应用。求指定日期距1990年1月1日的天数。
02【C语言&趣味算法】借书方案问题:小明有5本新书,要借给A、B、C三位小朋友,若每人每次只能借1本,则可以有多少种不同的借法?
01【C语言&趣味算法】百钱百鸡问题(问题简单,非初学者请忽略叭)。请注意算法的设计(程序的框架),程序流程图的绘制,算法的优化。
二、New Problem: Find in half(折半查找)
2.1 Description of the problem(问题描述)
众所周知,折半查找,又叫做"二分查找”。在此之前,我好像记录过类似的,可是呢,没有找到,再记录一下吧!
2.2Analysis of the problem(问题分析)
关键词:分治算法;
2.3 Algorithm design(算法设计)
关键词:有序,数组。
2.4 Procedure flow chart(程序流程图),Full code and output (完整code及输出)
先来看程序流程图:
完整code如下:
// 趣味09:折半查找(二分查找) #include <stdio.h> #define N 10 int main() { int i,a[N]={-3,4,7,9,13,45,67,89,100,180 },low=0,high=N-1,mid,k=-1,m; printf("a数组中的数据如下:\n"); for(i=0;i<N;i++) printf("%d ", a[i]); /*输出数组中原数据序列*/ printf("\n"); printf("Enter m: "); scanf("%d",&m); /*由键盘输入要查找的整数值*/ while(low<=high) /*继续查找的控制条件*/ { mid=(low+high)/2; /*确定指针mid的位置*/ if(m<a[mid]) high=mid-1; else if(m>a[mid]) low=mid+1; else { k=mid; break; /*一旦找到所要查找的元素便跳出环*/ } } if(k>=0) printf("m=%d,index=%d\n",m,k); else printf("Not be found!\n"); }
测试如下:
注意索引从0开始哈~
2.5附: Additional knowledge points (知识点补充) : continue、break