折半查詢法的兩種實現
折半查詢法:
在有序表中,把待查詢資料值與查詢範圍的中間元素值進行比較,會有三種情況出現:
1)
待查詢資料值與中間元素值正好相等,則放回中間元素值的索引。
2)
待查詢資料值比中間元素值小,則以整個查詢範圍的前半部分作為新的查詢範圍,執行
1),直到找到相等的值。
3)
待查詢資料值比中間元素值大,則以整個查詢範圍的後半部分作為新的查詢範圍,執行
1),直到找到相等的值
4)
如果最後找不到相等的值,則返回錯誤提示資訊。
按照二叉樹來理解:中間值為二叉樹的根,前半部分為左子樹,後半部分為右子樹。折半查詢法的查詢次數正好為該值所在的層數。等概率情況下,約為
log2(n+1)-1
//data為要查詢的陣列,x為待查詢資料值,beg為查詢範圍起始,last為查詢範圍終止
//非遞迴法
int bisearch(int data, const int x, int beg, int last)
while(beg <= last)
else if (data[mid] < x)
else if (data[mid] > x)
}return -1;
}//遞迴法
int iterbisearch(int data, const int x, int beg, int last)
else if (x < data[mid])
else if (x > data[mid])
return -1;
}//主函式
int _tmain(int argc, _tchar* argv)
; int no2search = 45;
cout << "the array is : " << endl;
int siz = sizeof(data1)/sizeof(int);
for (int i = 0; i < siz; i++)
cout << endl;
int index = -1;
//index = bisearch(data1, no2search, 0, siz);
index = iterbisearch(data1, no2search, 0, siz);
cout << "index of " << no2search << " is " << index << endl;
getchar();
return 0;
}
折半查詢的原理及其java的兩種實現
二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後...
折半查詢c 的兩種方法實現
折半查詢在資料結構演算法中是乙個比較實用的演算法。但是它是乙個只能用於查詢有順序的數,這並不影響它的使用,可以先實現乙個排序再進行查詢。折半查詢比較簡單,但是注意的點也比較多。下面我將用遞迴和非遞迴兩種方法進行實現。非遞迴 在取頭尾時有兩種選擇 左閉右閉 begin,end 左閉右開 begin,e...
03 兩種查詢演算法實現
什麼是列表查詢 順序查詢 線性查詢 二分查詢 順序查詢與二分查詢比較 執行時間 增速問題 一 什麼是查詢 二 順序查詢 線性查詢 從列表中查詢指定的元素 定義 從列表的第乙個元素開始,順序進行搜尋,直到找到元素或搜尋到列表最後乙個元素為止。線性查詢的 實現 enumerate 函式用於將乙個可遍歷的...