我真的不会-我是初学,一个关于顺序查找和折半查找的算法有错,求解答

问题描述

我是初学,一个关于顺序查找和折半查找的算法有错,求解答

```#include
#define Max 256

typedef struct Keylist
{
int key[Max];
int len;
}Keylist;

void creatKlist(Keylist L)
{
int i=0;
printf("**建立静态表**n");
printf("你需要构建多少个数据,请输入:");
scanf("%d",&L.len);
printf("n");
for(i=0;i<L.len;i++)
{
printf("请输入100以内的数据n");
scanf("%d",&L.key[i]);
}
}

Keylist sort(Keylist L)
{
int i,t;
for(i=0;i
{
if(L.key[i]>L.key[i+1])
{
t=L.key[i];
L.key[i+1]=L.key[i];
L.key[i]=t;
}
}
return L;
}

int Seqsearch(Keylist L,int k)
{
int i;
for(i=L.len;L.key[i]!=k;i--)
return i;
}

int *Binsearch(Keylist L,int k)
{
int high=L.len,low=1,mid;
int a[1];
while(low<=high)
{
mid=(low+high)/2;
if(L.key[mid]==k)
{
a[0]=mid;
return a;
}
else if(L.key[mid]<k)
{
low=mid+1;
a[1]++;
}
else
{
high=mid-1;
a[1]++;
}
}
return a;
}

void main()
{
Keylist L;
int a[1];
creatKlist(L);
int k,i,choice;
printf("请输入你想要执行的操作序号:n");
printf("1.顺序查找n2.折半查找n");
scanf("%d",&choice);
switch(choice)
{
printf("请输入关键码:n");
scanf("%d,&k");
case'1':
i=Seqsearch(L,k);
printf("顺序查找只有一次n");
if(i!=0)
printf("关键码的位置是第%d个",i);
if("i=0")
printf("关键码不存在!");
break;
case'2':
a=Binsearch(L,k);
printf("折半查找位置在%dn",a[0]);
printf("总共找了%d次n",a[1]);
break;
default:
printf("输入错误!结束进程!");
break;
}
return ;
}


解决方案

#include
#define Max 256
typedef struct Keylist
{
int key[Max];
int len;
}Keylist;
//void creatKlist( Keylist L)
void creatKlist( Keylist* L)
{
int i=0;
printf("**建立静态表**n");
printf("你需要构建多少个数据,请输入:");
scanf("%d",&L->len);
printf("n");
for(i=0;ilen;i++)
{
printf("请输入100以内的数据n");
scanf("%d",&L->key[i]);
}
}

//这个函数如果是想用来排序,显然是不对的哦
Keylist sort(Keylist L)
{
int i,t;
//for(i=0;i {
for(i=0;i < L.len; ++i )
{
if(L.key[i]>L.key[i+1])
{
t=L.key[i];
L.key[i+1]=L.key[i];
L.key[i]=t;
}
}
return L;
}
//int Seqsearch(Keylist L,int k)
int Seqsearch(Keylist* L,int k)
{
// int i;
// for(i=L->len;L->key[i]!=k;i--)
// return i;
int i;
for(i=L->len-1;L->key[i]!=k && i >= 0;i--)
;
return i;
}

//int Binsearch(Keylist L,int k)
int *Binsearch(Keylist
L,int k)
{
//int high=L->len,low=1,mid;
int high = L->len-1,low=0,mid;
//int a[1];
int* a = new int[2];
a[0] = 0;
a[1] = 0;
while(low<=high)
{
mid=(low+high)/2;
if(L->key[mid]==k)
{
a[0]=mid;
return a;
}
else if(L->key[mid]<k)
{
low=mid+1;
a[1]++;
}
else
{
high=mid-1;
a[1]++;
}
}
return a;
}
void main()
{
Keylist L;
//int a[1];
int* a = NULL;

//creatKlist( L );
creatKlist( &L );
int k,i,choice;
printf("请输入你想要执行的操作序号:n");
printf("1.顺序查找n2.折半查找n");
scanf("%d",&choice);
printf("请输入关键码:n");
//scanf("%d,&k");
scanf("%d", &k);
switch(choice)
{

// printf("请输入关键码:n");
// scanf("%d,&k");
// case'1':
case 1:
//i=Seqsearch(L,k);

    i=Seqsearch(&L,k);
    printf("顺序查找只有一次n");
    //if(i!=0)
    if ( i != -1 )
        printf("关键码的位置是第%d个",i+1);
    //if("i=0")
    else
        printf("关键码不存在!");
    break;
//case'2':
case 2:
    //a=Binsearch(L,k);
    a=Binsearch(&L,k);
    printf("折半查找位置在%dn",a[0]+1);
    printf("总共找了%d次n",a[1]+1);
    break;
default:
    printf("输入错误!结束进程!");
    break;
}

//释放内存
if ( NULL != a )
{
    delete[] a;
    a = NULL;
}
return ;

}

解决方案二:

在creatKlist函数中 for(i=0;ilen;i++)少了个小于号,这里粘贴代码时,会吃掉那个小于号,好奇怪,嘿嘿

解决方案三:

http://wenku.baidu.com/link?url=SNzV4kMiwOgD5D0DJbf26EX33O9yH8ejP3oSovV3q3ncNB_9txaYZZTo6pwDm615VEk7gBPwtc_Z8c0EMSA51zkdK7BLasF0qwZ3W7iolHq

解决方案四:

你贴的这代码,有好多问题哦,在你代码的基础上我改了下,可以运行
#include
#define Max 256
typedef struct Keylist
{
int key[Max];
int len;
}Keylist;
//void creatKlist( Keylist L)
void creatKlist( Keylist* L)
{
int i=0;
printf("**建立静态表**n");
printf("你需要构建多少个数据,请输入:");
scanf("%d",&L->len);
printf("n");
for(i=0;ilen;i++)
{
printf("请输入100以内的数据n");
scanf("%d",&L->key[i]);
}
}

//这个函数如果是想用来排序,显然是不对的哦
Keylist sort(Keylist L)
{
int i,t;
//for(i=0;i {
for(i=0;i < L.len; ++i )
{
if(L.key[i]>L.key[i+1])
{
t=L.key[i];
L.key[i+1]=L.key[i];
L.key[i]=t;
}
}
return L;
}
//int Seqsearch(Keylist L,int k)
int Seqsearch(Keylist* L,int k)
{
// int i;
// for(i=L->len;L->key[i]!=k;i--)
// return i;
int i;
for(i=L->len-1;L->key[i]!=k && i >= 0;i--)
;
return i;
}

//int Binsearch(Keylist L,int k)
int *Binsearch(Keylist
L,int k)
{
//int high=L->len,low=1,mid;
int high = L->len-1,low=0,mid;
//int a[1];
int* a = new int[2];
a[0] = 0;
a[1] = 0;
while(low<=high)
{
mid=(low+high)/2;
if(L->key[mid]==k)
{
a[0]=mid;
return a;
}
else if(L->key[mid]<k)
{
low=mid+1;
a[1]++;
}
else
{
high=mid-1;
a[1]++;
}
}
return a;
}
void main()
{
Keylist L;
//int a[1];
int* a = NULL;

//creatKlist( L );
creatKlist( &L );
int k,i,choice;
printf("请输入你想要执行的操作序号:n");
printf("1.顺序查找n2.折半查找n");
scanf("%d",&choice);
printf("请输入关键码:n");
//scanf("%d,&k");
scanf("%d", &k);
switch(choice)
{

// printf("请输入关键码:n");
// scanf("%d,&k");
// case'1':
case 1:
//i=Seqsearch(L,k);

    i=Seqsearch(&L,k);
    printf("顺序查找只有一次n");
    //if(i!=0)
    if ( i != -1 )
        printf("关键码的位置是第%d个",i+1);
    //if("i=0")
    else
        printf("关键码不存在!");
    break;
//case'2':
case 2:
    //a=Binsearch(L,k);
    a=Binsearch(&L,k);
    printf("折半查找位置在%dn",a[0]+1);
    printf("总共找了%d次n",a[1]+1);
    break;
default:
    printf("输入错误!结束进程!");
    break;
}

//释放内存
if ( NULL != a )
{
    delete[] a;
    a = NULL;
}
return ;

}



时间: 2024-10-21 08:24:24

我真的不会-我是初学,一个关于顺序查找和折半查找的算法有错,求解答的相关文章

c语言-我想用定时和外部中断写一个小车避障程序,可是不知道哪里错了,求解答

问题描述 我想用定时和外部中断写一个小车避障程序,可是不知道哪里错了,求解答 5C #include#include#define uint unsigned int#define uchar unsigned charsbit echo=P3^2;sbit trig=P2^3;unsigned char stime; void PWM_zk0(float zk) //高电 平占得比例占空比为(Gao/255){ CCAP0H = CCAP0L =255*(100.0 - zk)/100.0;

在as里边导入了一个jar包,出现“没有主清单属性”错误,求解答!!!

问题描述 在as里边导入了一个jar包,出现"没有主清单属性"错误,求解答!!! 在as里边导入了一个jar包,出现"没有主清单属性"错误,求解答!!! 解决方案 AS导入jar包和so库 解决方案二: http://jingyan.baidu.com/article/db55b60990f6084ba30a2fb8.html

svn上拉下来一个maven工程building的时候报错,求解答!

问题描述 svn上拉下来一个maven工程building的时候报错,求解答! 错误提示如下: 解决方案 **这个主要是JS的校验比较纠结,经常导致编译出错,这时把JavaScript Validator去掉即可. 选择项目--右键Properties--Builders--如果有则取消第一项"JavaScript Validator"的勾.**

我是一个JAVA写程序员,配置一台笔记本电脑,求建议

问题描述 我是一个JAVA写程序员,配置一台笔记本电脑,求建议 我是一个JAVA写程序员,配置一台笔记本电脑,求建议.具体什么牌子型号现在买了一台THINKPAD E565是A核A卡,感觉被坑了.想换一台. 解决方案 感觉坑,就自己组装一台~ 解决方案二: 我用的是Y480 配置刚刚的 解决方案三: 我用的华硕,I7处理器.4k多点.用起来很流畅. 解决方案四: 处理器I7吧,运行内存可以买个4G的,然后买个4G的内存条按上.绝对很流畅

初学android菜鸟的一个小小的问题,求解答

问题描述 初学android菜鸟的一个小小的问题,求解答 先上代码吧 public class MainActivity extends ListActivity { Button update_btn=null; private static final String url="http://192.168.191.1:8080/mp3/resources.xml"; @Override protected void onCreate(Bundle savedInstanceStat

参数-C 关于printf() 我真的很想问的一个问题!!!!

问题描述 C 关于printf() 我真的很想问的一个问题!!!! 编译器怎样检查 printf () 参数个数的? 刚刚学C 不久,不知道怎么找,于是到这里提问来了... 提前谢谢所有回答的人!!! thanks for your time . 解决方案 参考一下这个回答,对你应该有帮助 C中的可变参数研究 一. 何谓可变参数 int printf( const char* format, ...); 这是使用过C语言的人所再熟悉不过的printf函数原型,它的参数中就有固定参数format和

tomcat-JAVA问题:初学HttpServlet时遇到的问题,服务器用的Tomcat,求指教!

问题描述 JAVA问题:初学HttpServlet时遇到的问题,服务器用的Tomcat,求指教! 一月 30, 2016 10:28:59 上午 org.apache.catalina.core.AprLifecycleListener init 信息: Loaded APR based Apache Tomcat Native library 1.1.27 using APR version 1.4.6. 一月 30, 2016 10:28:59 上午 org.apache.catalina.

一个ajax最简单的问题困扰了好久啊,求大神帮忙看看,后台是vb.net的

问题描述 一个ajax最简单的问题困扰了好久啊,求大神帮忙看看,后台是vb.net的 前台的ajax是这样的: <script type="text/javascript"> $(function () { $("#button1").click(function () { $.ajax({ type: "post", url: "ajax.aspx/ajaxtext", dataType: "text&

JAVA编写日历时随便给一个号数怎么知道当天星期几,算法是怎么样的?

问题描述 JAVA编写日历时随便给一个号数怎么知道当天星期几,算法是怎么样的? 我初学正在写日历的代码,如图,我在写一个月最后添加下个月的开始几天,求随便给个号数怎么知道当天星期几?要算法 不要函数 解决方案 365 * --年 + (年 / 4 - 年 / 100 + 年 / 400) + 月 + 日 % 7 以上是计算公式 解决方案二: java的日历类,可以得到某个日期的年月日.星期等属性的.Calendar类有关于时间的各种属性的,年月日.时分秒.星期等. 参考:http://blog.