折半查詢法問題
阿新 • • 發佈:2018-12-10
1.問題描述 有15個數存放在一個數組中,輸入一個數,要求用折半查詢法找出該數是陣列中第幾個元素值。如果該數不在陣列中,則打印出“無此數”。 2.程式設計分析 首先要把15個數排序,這裡選擇的是選擇排序法,然後用折半查詢法尋找此數num,這裡需要定義三個變數分別是陣列首部top,陣列中部mid和陣列尾部bot。即top=0,bot=14,mid=(top+bot)/2。然後利用迴圈結構while來尋找此數,迴圈條件是(top<=bot),如果a[mid]=num,則查詢成功,輸出該數在數組裡的下標,如果a[mid]
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,k,p,q,num,top=0,mid,bot=14;
int a[15];
for(i=0;i<15;i++)
scanf("%d",&a[i]);
for(i=0;i<15;i++)
{
p=i;
q=a[i];
for(j=i+1;j<15;j++)
{
if(q>a[j])
{
p=j;
q =a[j];
}
}
if(p!=i)
{
k=a[i];
a[i]=a[p];
a[p]=k;
}
printf("%d\t",a[i]);
}
printf("\n請輸入要查詢的數:");
scanf("%d",&num);
mid=(top+bot)/2;
while(top<=bot)
{
if(a[mid]==num)
break ;
else
if(a[mid]>num)
bot=mid-1;
else
top=mid+1;
mid=(top+bot)/2;
}
if(top>bot)
printf("無此數\n");
else
printf("查詢的數在陣列的第%d個位置\n",mid+1);
system("pause");
return 0;
}