遇到“有序”數(shù)組中查找元素類的題,優(yōu)先考慮折半查找(二分查找)
成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計、成都做網(wǎng)站、烏海網(wǎng)絡(luò)推廣、小程序開發(fā)、烏海網(wǎng)絡(luò)營銷、烏海企業(yè)策劃、烏海品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供烏海建站搭建服務(wù),24小時服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com做法核心是利用所定義的下標(biāo)left和right與mid(由計算得來)下標(biāo)的比較來逐漸縮短查找范圍,達(dá)到一個閾值后即為找到。
源代碼如下:
#include
#include
int search(int a[], int x, int left, int right)//定義二分查找函數(shù)
{
while (left <= right)
{
int mid = (left + right) / 2;//計算當(dāng)前查找范圍中間元素的下標(biāo)
if (x < a[mid])
{
right = mid - 1;//若在中間元素的左邊則移動right下標(biāo)
}
if (x>a[mid])
{
left = mid + 1;//若在中間元素的右邊則移動left下標(biāo)
}
else
{
return mid;//說明找到元素
}
}
return 0;
}
int main()
{
int i, m, n;
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };//可事先定義也可讓用戶輸入
int left = 0, right = sizeof(a) / sizeof(a[0]);
printf("請輸入你要查找的數(shù)字:\n");
scanf("%d", &n);
m = search(a, n, left, right);
if (m)
{
printf("找到了,下標(biāo)為%d\n",m);
}
else
printf("找不到\n");
system("pause");
return 0;
}
運行結(jié)果:
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。