本文目錄一覽:
- 1、怎樣寫二分查找演算法的程序(用C語言實現)
- 2、誰能用c語言幫我寫個二分法的查找程序??
- 3、用C語言寫二分查找的代碼!!!
- 4、c語言如何實現二分查找,問題描述看圖,我的源代碼如下:
- 5、C語言二分查找
- 6、c語言實驗報告的二分法查找,跪求各位高手幫助
怎樣寫二分查找演算法的程序(用C語言實現)
我用一個子函數實現的,主函數你自己寫,對你又好處,需要傳入一個數組和數組長度n以及要查找的數,如果查找成功,返回x在數組中的位置,否則返回-1
int search(int *a,int x)
{ int low=0,high=n-1,mid,flag=-1;
while(low=high)
{ mid=(low+high)/2;
if(a[mid]==x) return mid;
else if(a[mid]low) low=mid+1;
else high=mid-1;
}
return flag;
}
誰能用c語言幫我寫個二分法的查找程序??
#includestdlib.h
void
sort(int
a[],int
n){
/*排序函數,要使用二分法查找就必須對數組進行排序*/
int
i,k;
for(i=0;in;i++){
int
min=i;
for(k=i+1;kn;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(minmax){/*如果最頭的變數值大於最尾變數的值,則查找不到,查找失敗*/
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();
}
用C語言寫二分查找的代碼!!!
推薦答案的 code 有問題,並沒有考慮到若待查數的下標是 0 怎麼辦?所以若順序表中不存在待查元素 應該 return -1
加上主函數的最後兩行調用兩次查找函數很多餘,代碼顯得不夠簡練。
建議改成:
#include stdio.h
#include stdlib.h
int Search(int *a, int key)
{
// 在順序表中折半查找 key的數據元素。若找到,則函數值為
int low = 0, mid; // 該元素的數組下標;否則為0。
int high = 14;
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 -1; // 順序表中不存在待查元素
}
void main()
{
int *a, key, i;
int b[15] = {0};
a = b;
printf(“請自小到大輸入15個整數:\n”);
for (i = 1; i = 15; i++)
{
scanf(“%d”, b[i – 1]);
printf(“\n”);
}
printf(“請輸入你要查找的數:\n”);
scanf(“%d”, key);
i = Search(a, key);
if (-1 == i)
printf(“你要查找的數不在目標數組中!\n”);
else
printf(“你要查找的數的數組下標為 %d \n”, i);
}
c語言如何實現二分查找,問題描述看圖,我的源代碼如下:
#include stdio.h
int numbers[1000001]; //全局變數,數組numbers太大,必須放在這裡定義
int Bsearch(int numbers[], int left, int right, int k);
int main()
{
int i, j, k, m, n;
//數組numbers太大,不能放在main函數里,而要放在函數外定義,
//不然的話,會導致函數堆棧溢出.
//原代碼int numbers[1000001];
// 反覆讀入數字和查找數字的數量
while (scanf(“%d %d”, n, k) != EOF)
{
// 讀入給定的數字
for (i = 0; i n; i++)
{
scanf(“%d”, numbers[i]);
}
for (j = 0; j k; j++)
{
// 讀入待查找的數字,
scanf(“%d”, m);
// 請在下面完成查找讀入數字的功能
int ret;
ret = Bsearch(numbers, 0, n – 1, m);
printf(“%d”, ret);
if (j != k – 1)
{
printf(” “);
}
}
printf(“\n”);
}
return 0;
}
int Bsearch(int numbers[], int left, int right, int m)
{
int mid;
while (left = right) //原代碼while (left right)
{
mid = (left + right) / 2;
if (numbers[mid] == m)
{
return mid + 1;
}
else if (numbers[mid] m)
{
right = mid -1;
}
else
{
left = mid + 1;
}
}
return 0;
}
C語言二分查找
if(key==a[mid]) return mid; 這句就是罪魁禍首。呵呵你是想用return來結束while循環吧。用錯了。
找到結果後,你應該是把結果輸出出來,而不是用return。return語句是返回整個函數的,在你的程序里main函數就結束了,你當然看不到任何結果了。
改為:
if(key==a[mid]) break; *這行是結束while循環的。而不是你所用的return*/
}
c語言實驗報告的二分法查找,跪求各位高手幫助
#include”stdio.h”
#define N 10
int find(int a[],int x)
{
int p,h,t;
p=-1;
h=0,t=N-1;
while(h=t)
if(a[(h+t)/2]x) h=(h+t)/2;
else if(a[(h+t)/2]x) t=(h+t)/2;
else {p=(h+t)/2;break;}
return p;
}
main()
{
int p,m,a[N]={1,3,4,8,9,11,13,17,18,20};
scanf(“%d”,m);
p=find(a,m);
if(p==-1) printf(“\nno!”);
else printf(“\nYES! %d”,p);
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/288563.html