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

c語言二分法查找

發布時間: 2022-06-13 01:58:23

1. c語言編程中什麼是二分法

先把數據排序,然後把目標數值與中間的數值相比較,根據中間數值是大於、小於、等於三種情況變化數列的首尾指針,構成新數列,再取新數列的中間數與目標值比較,如此反復。。。

2. C語言中怎樣利用折半查找法(二分查找法)找到數列中的一個數

根據需求,用二分法查找指定數組中的指定數字,代碼如下:
#include <stdio.h>
// 在長度為len的數組a中尋找n,找到就返回數組下標,沒找到就返回-1
int search(int a[], int len, int n)
{
int index = -1;
int left = 0, right = len, mid = (left + right) / 2;

while (left <= right)
{
if (n == a[mid])
{
index = mid;
break;
}
elseif (n > a[mid])
{
left = mid + 1;
mid = (left + right) / 2;
}
else
{
right = mid - 1;
mid = (left + right) / 2;
}
}

return index;
}
int main()
{
int array[] = {5, 8, 13, 17, 23, 25, 29, 50, 53}; // 數組
int length = 9; // 數組長度
int aim = 17; // 查找目標

// 輸出查找結果, Search 17 in array[]: 3
printf("Search %d in array[]: %d\n", aim, search(array, length, aim));

return0;
}

3. 怎麼用C語言求二分法

二分法查找有一個前提,數據應該是排好序的,假設從小到大排列,則:
首先用中間那個數(也可以不是正中間,差一兩位沒有關系,只要保證不忽略數據就行)與查找值比較,大於查找值就跳到左邊。
然後重新設定新的數列。新的數列為,從最小的數值到中間那個數。
以這個新的數列為基礎,重復以上步驟。

4. 誰能用c語言幫我寫個二分法的查找程序

#include<stdlib.h>
void
sort(int
a[],int
n){
/*排序函數,要使用二分法查找就必須對數組進行排序*/
int
i,k;
for(i=0;i<n;i++){
int
min=i;
for(k=i+1;k<n;k++)
if(a[min]>a[k])min=k;
if(i!=min){
a[min]+=a[i];/*這里是運用加減法交換兩個數*/
a[i]=a[min]-a[i];
a[min]-=a[i];
}
}
}
int
find(int
a[],int
n,int
key){/*二分法查找;參數:數組名,數組長度,查找關鍵字*/
int
min=0,max=n-1;/*二分法查找頭尾變數*/
while(min<max){/*如果最頭的變數值大於最尾變數的值,則查找不到,查找失敗*/
int
cen
=
(min+max)/2;
if(a[cen]==key)
return
cen;/*如果查到,則返回關鍵字在排序數組的下標*/
if(cen==min
||
cen==max)break;/*如果中間變數等於頭尾任一個變數,同樣查找失敗*/
if(a[cen]>key)
max=cen;
else
min=cen;
}
return
-1;
}
void
main(){/*主程序只是為了證明兩個函數的可行性,可以自己編寫*/
int
a[]={14,10,25,36,87,95,10,12,13,8},i;
sort(a,10);
i=find(a,10,11);
if(i!=-1)
printf("be
found");
else
printf("no
found");
getch();
}

5. C語言中二分法的具體程序是什麼呢

舉個例子:
//二分查找法//
#
include
void
main()
{
int
a[16],i,num,flag=0,top,bottom,mid;
//定義一個一維數組a[16]用來存放供查找用的數據,但只用a[1]——a[15]//
//num用來放要查找的數據,flag是表示是否找到的開關變數,top表示查找的起始位置,bottom表示查找的終止位置,mid表示top與bottom的中間位置//
char
goon;
//變數goon為'y'或'Y'時表示繼續下一輪查找,否則終止程序//
printf("請輸入第1個數字:\n");
scanf("
%d",&a[1]);
//依次輸入第二到第十五個數,並要求輸入的數遞減//
for(i=2;i<=15;i++)
{
printf("請輸入第%d個數字:\n",i);
scanf("
%d",&a[i]);
if(a[i]>=a[i-1])
{
printf("請再次輸入,它應該比上一個數小:\n");
scanf("
%d",&a[i]);
}
}
//輸出剛才輸入的數//
printf("你剛才輸入的數是:\n");
for(i=1;i<=15;i++)
printf("
%d",a[i]);
printf("\n");
//查找循環開始//
do
{
printf("現在請輸入你要查找的數:\n");//輸入想要查找的數//
scanf("
%d",&num);
top=15;
bottom=1;
mid=15/2+1;
if(num>a[1]
||
num
0)//如果在規定的范圍內,開始二分法查找//
{
if(num==a[mid])//找到所需數據,退出本層循環//
{
printf("你所要查找的數字是第%d個。\n",mid);
flag=1;
}
else
if(num>a[mid])//如果要查找的數據比a[mid]大,在前半數組查找//
{
top=mid+1;
mid=(top+bottom)/2;
}
else
//如果要查找的數據比a[mid]小,在後半數組查找//
{
bottom=mid-1;
mid=(top+bottom)/2;
}
}
if(flag==0)//如果未找到數據,輸出找不到的信息//
printf("無法找到你要找的數字!\n");
printf("是否繼續查找?(Y/N):\n");//詢問是否開始下一輪查找//
scanf("
%c",&goon);
}while(goon=='y'
||
goon=='Y');
}

6. C語言如何用二分法查找一個數.我要一個例題

//二分法查找一個數,原數列必須是有序的,
//有個問題,當數列中有相同的數怎麼處理,也就是只找到其中一個

void binsrch( int m[N],int k){
int low,high,mid;
low=0;high=N-1;
while (low<=high){
mid=(low+high)/2;
if (k>m[mid])
high=mid-1;
if (k<m[mid])
low=mid+1;
if (k==m[mid]){
printf("找到此數在數組的%d位,值為%d",mid+1,k);
return;
}

}
printf("沒有找到此數,非常報歉");
return;

}

7. C語言 二分法查找的問題請大家幫我解惑。

最壞的情況應該是log2n向下取整+1,這也是折半查找判定樹(完全二叉樹)的樹高。
第一,題目不嚴謹,這個折半查找可以向上或向下取整(大部分參考書上默認用向下取整來講解),向下取整當然是花4次找到8,而向上取整是3次。
第二,最後剩下一個數的時候,那個數還需不需要比較,從代碼層面來看,不能簡單認為最後剩下的一個數就是所找的數,因為那個數可能並不在序列中,所以最後一次也應該比較。折半查找判定樹也是這么定義的,所查找數字所在層的樹高即比較次數。
至於那個結論,最壞情況下需要比較的次數,是一個等價無窮小的結論而已。因為比較次數是一個整數,結果可能是個小數,如果那個是最壞比較次數的具體答案的話,它還會指明它是向上取整還是向下取整。

8. C語言二分法查找

二分法查找又稱折半查字法;
思路是.恩!
舉例吧0,1,2,3,4,5,6,7,8中找5取數組中的一半也就是地五個4與5比較,如果4>5(就是中間的那個數比要找的那個大,那麼就取那個數之前的那部分);如果4<5(就是中間的那個數比要找的那個小,就取那個數只後的那部分);如此循環下去;
不好意思,語文沒學好,表達不清楚

9. c語言中的二分法查找是什麼

是一種數據處理的演算法。常用與排序。
例如
int
a,b=4,calc;
int
sum[]={1,2,3,4,5,6,7,8,9};
//這樣一個數組
scanf(a);
for(calc=0;calc<9;calc++)
{
if(a<sum[b])
{
b=b/2;
if(a<sum[b])
{
printf("這個數按照升序排序位置是在"
,
b+1);
}
}else
{
b=b*2;
if(a<sum[b])
{
printf("這個數按照升序排序位置是在",b+1);
};
};
};
取一段數的中間數,來與已知的數來比較。來確定在數的前方還是後方,再重復以上比較。最後確定在一列排序完成的數集合中的位置。
【寫的存在問題。】因為在考試,時間有限。

10. C語言二分法查找key值解析

#include<stdio.h>


void main()


{ int a[10]={9,16,25,32,2,1,29,81,36,21};


int key,low=0,high=10-1,mid,k=-1;


int i,j,t;


printf(" please input:");


scanf("%d",&key);


for(i=0;i<10;i++)


{for(j=0;j<10-i;j++)

熱點內容
支付寶付款碼怎麼設置密碼 發布:2024-05-05 01:27:36 瀏覽:877
qtp錄制的腳本 發布:2024-05-05 01:14:04 瀏覽:366
如何安裝卡羅拉安卓系統 發布:2024-05-05 01:09:00 瀏覽:984
sql創建表查詢表 發布:2024-05-05 01:00:12 瀏覽:798
食色抖音上傳 發布:2024-05-05 00:55:56 瀏覽:657
java圖片下載 發布:2024-05-05 00:50:45 瀏覽:597
唱吧如何上傳伴奏 發布:2024-05-05 00:49:04 瀏覽:444
什麼配置單反拍視頻最好 發布:2024-05-05 00:30:56 瀏覽:478
sql敏感 發布:2024-05-05 00:28:20 瀏覽:62
android工程師筆試 發布:2024-05-05 00:10:52 瀏覽:948