1. 程式人生 > >折半查詢法問題

折半查詢法問題

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; }