1. 程式人生 > 其它 >陣列實驗:有15個數按由小到大順序存放在一個數組中,輸入一個數,要求用折半查詢法找出該數是陣列中第幾個元素的值。如果該數不在陣列中,則打印出“無此數”。

陣列實驗:有15個數按由小到大順序存放在一個數組中,輸入一個數,要求用折半查詢法找出該數是陣列中第幾個元素的值。如果該數不在陣列中,則打印出“無此數”。

技術標籤:安農大信計院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);
}

在這裡插入圖片描述
在這裡插入圖片描述