我修改的来源
http://www.cnhacker.com/bbs/read ... page=1&toread=1复制内容到剪贴板
代码:
#include <stdio.h>
void seqsearch(int p[]); //直接查抄函数原型
void binsearch(int p[]); //折半查找函数原型
void bubblesort(int r[]); //起泡无敌风火轮
void menu(void); //菜单
int ch = 0; //用全局变量要多加小心 但是这里适合
void menu(void) //菜单打印
{
printf("1.seqsearch()\n");
printf("2.binsearch()\n");
printf("3.exit()\n");
printf("please select the method: ");
}
int main(void)
{
int i = 0, j = 1;
int a[10]; //用来存放数字的10个元素的数组
for(i = 0; i < 10; i ++)
{
printf("please input the No.%d data: ", i+1);
scanf("%d", &a[i]); //依次放入相应的数组元素
}
while(j)
{
menu();
scanf("%d", &ch); //读入菜单选择结果
switch(ch)
{
case 1:
seqsearch(a); //是1则调用直接查找函数
break;
case 2:
binsearch(a); //是2则调用折半查找函数
break;
case 3:
j = 0; //是3则退出
break;
default:
printf("Error! No %d for select!", ch); //这里break就是多此一举
}
printf("\n"); //晕 还挺注意美观的
}
return 0; //主函数完成 符合C99 表扬
}
void seqsearch(int p[]) //直接查找函数
{
int i = 0, data = 0;
printf("please input find data:"); //输入要找的数字
scanf("%d", &data); //放到data的内存空间
while(data != p[i] && i < 10) //开始一个一个的找
{
i ++;
}
if(i >= 10) //如果等于n那就没了
printf("The data is not found!\n");
else //出此以外 那么打印
printf("the %d position is %d\n", data, i+1);
}
void binsearch(int p[]) //折半法
{
int data, low = 0, high = 10, mid, find = 0;
bubblesort(p); //风火轮排序
for(data = 0; data < 10; data ++)
printf("%d ", p[data]); //循环打印排序后的数组 恐怕不行
printf("\n");
printf("please input find data: "); //输入要找的数字
scanf("%d", &data);
while(low <= high && !find) //如果
{
mid = (low + high)/2;
if(data < p[mid])
high = mid - 1;
else if(data > p[mid])
low = mid + 1;
else
find = 1;
}
if(!find) //如果是前面条件导致退出 find必然为0
printf("the data is not found!\n");
else //否则就找到了
printf("the %d position is %d\n", data, mid+1);
}
void bubblesort(int r[]) //排序程序
{
int i, j, temp; //局部变量
for(j = 0; j < 9; j ++) //排序
{
for(i = 0; i < 9; i ++)
{
if(r[i] > r[i + 1])
{
temp = r[i]; //交换
r[i] = r[i + 1];
r[i + 1] = temp;
}
}
}
}