程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 我真的不會-我是初學,一個關於順序查找和折半查找的算法有錯,求解答

我真的不會-我是初學,一個關於順序查找和折半查找的算法有錯,求解答

編輯:編程綜合問答
我是初學,一個關於順序查找和折半查找的算法有錯,求解答

```#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("折半查找位置在%d\n",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("折半查找位置在%d\n",a[0]+1);
    printf("總共找了%d次\n",a[1]+1);
    break;
default:
    printf("輸入錯誤!結束進程!");
    break;
}

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

}

dasusu
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved