當前位置:首頁 » 編程語言 » c語言二分查找

c語言二分查找

發布時間: 2022-01-08 06:47:07

c語言二分查找

if(key==a[mid]) return mid; 這句就是罪魁禍首。呵呵你是想用return來結束while循環吧。用錯了。
找到結果後,你應該是把結果輸出出來,而不是用return。return語句是返回整個函數的,在你的程序里main函數就結束了,你當然看不到任何結果了。
改為:
if(key==a[mid]) break; *這行是結束while循環的。而不是你所用的return*/
}

❷ 用C語言寫二分查找的代碼!!!

推薦答案的 code 有問題,並沒有考慮到若待查數的下標是 0 怎麼辦?所以若順序表中不存在待查元素應該 return-1

加上主函數的最後兩行調用兩次查找函數很多餘,代碼顯得不夠簡練。

建議改成:

#include<stdio.h>
#include<stdlib.h>

intSearch(int*a,intkey)
{
//在順序表中折半查找key的數據元素。若找到,則函數值為
intlow=0,mid;//該元素的數組下標;否則為0。
inthigh=14;
while(low<=high)
{
mid=(low+high)/2;
if(key==a[mid])
returnmid;//找到待查元素
elseif(key<a[mid])
high=mid-1;//繼續在前半區間進行查找
else
low=mid+1;//繼續在後半區間進行查找
}
return-1;//順序表中不存在待查元素
}
voidmain()
{
int*a,key,i;
intb[15]={0};
a=b;

printf("請自小到大輸入15個整數: ");
for(i=1;i<=15;i++)
{
scanf("%d",&b[i-1]);
printf(" ");
}
printf("請輸入你要查找的數: ");
scanf("%d",&key);
i=Search(a,key);
if(-1==i)
printf("你要查找的數不在目標數組中! ");
else
printf("你要查找的數的數組下標為%d ",i);
}

❸ 二分查找 C語言

這最後一個語句寫錯了:
printf("您輸入的數組是");for(i=0;i<n;i++){printf("%d",&a[i]);}
應該是:
printf("您輸入的數組是");for(i=0;i<n;i++){printf("%d ",a[i]);} //要有空格,不要有取地址符

❹ C語言二分查找運用指針

1.你以為是傳一個數組a[]對吧。其實這里將一個指針p指向這個數組a,這時候p和a是一樣的。只是用指針形式比較嚴謹,這里用a[]也沒關系,因為兩者是一樣的。
2。b[14]
=
{0},是把整個數組初始化所有元素都為0,注意只有寫成0是這樣的,如果寫成b[14]={1},那麼只有b[0]也就是b的第一個元素是1,其它的是任意的
3。輸出地內容是傳入數組a中值和key一樣的元素的下標,如果找不到就返回0。
為什麼?這是二分法查找的核心呀。二分法查找的數組必須是排好序的.
比如
1
3
7
8
9
10
15那麼
你要搜一個數3,首先就從中間開始搜,那麼
比中間這個數大的就會在右邊,小的在左邊,這樣
每次查找都會讓區間縮小一半,這就是二分法查找的核心。具體的你可以去搜一下二分查找。這就不再多言了。

❺ C語言二分查找法

#include <stdio.h>

int binfind(int val[] , int num , int value)
{
int start = 0;
int end = num - 1;
int mid = (start + end)/2;
while(val[mid] != value && start < end)
{
if (val[mid] > value)
{
end = mid - 1;
}
else if (val[mid] < value)
{
start = mid + 1;
}
mid = ( start + end )/2;
}
if (val[mid] == value)
return mid;
else
return -1;
}

int main()
{
int nums[] = {1 , 3 , 4 ,7 ,8 , 12 ,45 ,67 ,97 ,123 ,456 ,675 ,1111 , 4534 , 4563};
int result = binfind(nums , sizeof(nums) / sizeof(nums[0]) , 45);
if (result < 0)
{
printf("查無此數");
}

}

❻ c語言編程二分查找

好久不寫了

寫一個程序,建立N元整型數組,然後輸入查找的整數x,查找x是否包含在數組中,查找用函數實現,若查找成功,返回x在數組中的第一次出現的下標,查找失敗,返回-1

源程序:
#include"stdio.h"
#define N 10
int locate(int a[N],int x)
{int h,r,m;
h=0;r=N-1;m=(h+r)/2;
while(h<=r&&x!=a[m])
if(x<a[m]) {r=m-1;m=(h+r)/2;}
else {h=m+1;m=(h+r)/2;}
if(h>r) return -1; /*查找失敗,返回-1*/
return m; /*查找成功,返回有效下標m */
}
void upinsert(int a[],int i) /*插入排序 (升序)*/
{int x,j;
x=a[i];j=i-1;
while(j>=0&&a[j]>x) {a[j+1]=a[j];j--;}
a[j+1]=x;
}
void main()
{int a[N],x,k,n;
printf("input %d integers:\n",N);
for(k=0;k<N;k++) {scanf("%d",a+k);upinsert(a,k);}
printf("input x=") ;scanf("%d",&x);
n=locate(a,x);
for(k=0;k<N;k++) printf("%4d",a[k]);
printf("\n fist position=%d\n",n);
}

沒有錯誤,我試過了

❼ 二分查找C語言

你的錯誤挺多的,首先是忘了定義int x;

其次是對strlen()函數的用法錯了,你的數組s[]是整型,但是strlen(char*ch),括弧里的只能寫字元型數組的變數名,你要求整型數組的長度可以這樣求n=sizeof(s)/sizeof(int);

最後一個也是挺致命的錯誤就是Bsearch()函數里的while循環應該是while(low<=high),而不是while(low<high);以及對break的使用,你也用錯了,break是跳出循環的意思,你用在這里就是不執行while的意思,如果你非要用的話應該是continue,然而事實上你什麼也不寫就好了。具體代碼如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
intBsearch(ints[],intx,intn);
intmain(void)
{
inti;
intn;
intx;//這里你沒寫
ints[10]={1,2,3,4,5,6,7,8,9,10};
n=sizeof(s)/sizeof(int);//這里應該改成這樣
printf("%dpleaseinputx:",n);
scanf("%d",&x);
i=Bsearch(s,x,n);//這里不要寫成s[]
printf(" %d",i);
system("pause");
return0;
}
intBsearch(ints[],intx,intn)
{
intlow,high,mid;
low=0;
high=n-1;
while(low<=high)
{
mid=(low+high)/2;
if(s[mid]>x)
{
high=mid-1;
continue;//這行不寫也行,下面也是
}
elseif(s[mid]<x)
{
low=mid+1;
continue;
}
else
{
returnmid;
}
}
return-1;
}

❽ c語言二分查找問題,新手不懂。

有兩個地方需要修改一下

1、循環條件改為while(left<=right),否則有些值查詢不到

2、ret初始化為一個不可能的下標值,如-1,否則如果查不到的話可能產生誤解

3、return ret這句多餘,刪除掉

修改後代碼如下,修改位置代碼中注釋給出:

#include"stdio.h"
intmain(void)
{
inta[]={1,2,3,4,5,6,7,8,9,10,56,58,684,699};
intlength=sizeof(a)/sizeof(a[0]);
for(inti=0;i<length;i++)
printf("a[%d]=%-5d",i,a[i]);
printf(" ");
intk;
printf("k=");
scanf("%d",&k);
intret=-1;//////////////
intright=length-1,left=0;
while(left<=right)///////////////
{
intmid=(right+left)/2;
if(a[mid]==k)
{
ret=mid;
break;
}
elseif(a[mid]<k)
left=mid+1;
else
right=mid-1;
//returnret;////////////////////
}
printf("%d",ret);//這一步輸不出來,沒有結果啊。
return0;
}

❾ 用C語言編二分查找

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void xuanzhe(int a[], int n)
{
int i, j, min, t;

for (i=0; i<n-1; i++) /*要選擇的次數:0~n-2共n-1次*/
{
min = i; /*假設當前下標為i的數最小,比較後再調整*/
for (j=i+1; j<n; j++)/*循環找出最小的數的下標是哪個*/
{
if (a[j] < a[min])
{
min = j; /*如果後面的數比前面的小,則記下它的下標*/
}
}

if (min != i) /*如果min在循環中改變了,就需要交換數據*/
{
t = a[i];
a[i] = a[min];
a[min] = t;
}
}
}
int main(){
int i,n,x;
int mid,left=0,right=999;
int find1=0,find2=0;
double y;
int a[1000];
for(i=0;i<1000;++i){
a[i]=rand();
}
xuanzhe(a,1000);
scanf("%d",&x);
printf("順序查找:\n");
for(i=0;i<1000;++i){
while(x==a[i]){
printf("找到X=%d,a[%d]\n",x,i);
find1=1;
break;
}
}
if(find1==0){
printf("沒有你要找的數\n");
}

printf("%fs\n",clock()/CLOCKS_PER_SEC);
y=clock();
printf("二分查找:\n");
while(!find2&&left<right)
{
mid=(left+right)/2;
if(x==a[mid])
find2=1;
else if(x<a[mid])
right=mid-1;
else left=mid+1;
}
if(find2==1)
printf("找到x=%d ,a[%d]\n",x,mid);
else
printf("沒有你要找的數\n");
printf("%fs\n",(clock()-y)/CLOCKS_PER_SEC);
}

❿ C語言的二分查找

#include <stdio.h>
#include <stdlib.h>

int search(int* a, int key)
{
int low = 0;
int high = 14;
int mid;
while (low <= high)
{
mid = (low + high) / 2;
if (key == a[mid])
return mid;
else if (key < a[mid])
high = mid - 1;
else
low = mid + 1;
}
return 0;
}

int main()
{
int* a, key, i = 0;
int b[15] =
{
0
};
a = b;
printf("please input all the 15 data(from small to big) \n ");
for (i = 0; i < 15; i++)
{
scanf("&d", &b[i]); //這里是b[i]
printf("\n");
}
printf("please input the key");
scanf("%d", &key);
if (!search(a, key))
printf("there is no data you are searching for \n");
else //這個else不能少,不然你怎麼運行都會輸出下面的語句
{
printf("the data you are searching for is in the %dth place\n",
search(a, key));
}
getchar();
return 0;
}

熱點內容
sqlscope 發布:2024-05-16 21:17:37 瀏覽:965
存儲器通常有 發布:2024-05-16 21:17:35 瀏覽:378
雲資料庫概念 發布:2024-05-16 21:17:32 瀏覽:818
鋪地板編程 發布:2024-05-16 21:07:36 瀏覽:458
蘋果手機緩存刪除 發布:2024-05-16 21:04:35 瀏覽:507
scratch編程電子書 發布:2024-05-16 21:02:54 瀏覽:227
wps加密文件忘記密碼 發布:2024-05-16 21:01:37 瀏覽:931
不義聯盟安卓版在哪裡下載 發布:2024-05-16 21:00:42 瀏覽:726
微信存儲空間不足怎麼辦 發布:2024-05-16 21:00:24 瀏覽:790
dh加密演算法 發布:2024-05-16 20:14:34 瀏覽:872