陣列實驗:有15個數按由小到大順序存放在一個數組中,輸入一個數,要求用折半查詢法找出該數是陣列中第幾個元素的值。如果該數不在陣列中,則打印出“無此數”。
阿新 • • 發佈:2021-01-08
技術標籤:安農大信計院C語言實驗題c語言
折半查詢法:
low代表第一個元素的下標,mid代表中間元素的下標,high代表最後一個元素的下標,num為查詢的數字
始終在low與high區間中找
若num小於mid,則high為mid-1,重新放置mid
若num大於mid,則low為mid+1,重新放置mid
直到找到num等於mid結束,若陣列中不存在num,直到low<=high結束
只適用於有序的陣列
#include <stdio.h> int HalfSearch(int a[],int length,int num) { int low=0; int high=length-1; int mid; while(low<=high) { mid=low+(high-low)/2; if(num==a[mid]) return mid+1;//mid為陣列括號中的數字,而題目中求的是第幾個元素,故mid需加一 else if(num>a[mid]) low=mid+1; else high=mid-1; } return -1; } void main() { int x,array[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},result; printf("請輸入想要查詢的數:"); scanf("%d",&x); result=HalfSearch(array,15,x); if(result==-1) printf("無此數\n"); else printf("該數位於陣列中第 %d 個元素\n",result); }