查詢(c++)
阿新 • • 發佈:2021-02-06
查詢
1.順序查詢
在一批整型資料2、 3 、1、 7、5、 8、 9、 0、 4、 6中查詢某個元素x是否出現
#include <iostream> #include <cmath> using namespace std; int main() { int x,k; int array[] = { 2,3,1,7,5,8,9,0,4,6 }; cout << "請輸入要查詢的資料:"; cin >> x; for ( k = 0; k < 10; ++k) if (x == array[k]) break; if (x == 10) cout << "沒有找到" << endl; else cout << x << "的儲存位置為:" << k + 1<< endl; return 0; }
執行結果:
2.二分查詢
針對已排好序的資料進行查詢
在已排好序的一批整型資料0, 1,2, 3,4, 5,6, 7,8,9中,查詢某個元素是否出現,並輸出其位置
#include <iostream> #include <cmath> using namespace std; int main() { int x,low,high,mid; int array[] = { 0,1,2,3,4,5,6,7,8,9 }; low = 0; high = 9; cout << "請輸入要查詢的資料:"; cin >> x; while (low <= high) { mid = (low + high) / 2; if (x == array[mid]) break; else if (x < array[mid]) high = mid-1; else low = mid+1; } if (low <= high) cout << x << "在數列中的位置為:" << mid + 1 << endl; else cout << "沒有找到" << endl; return 0; }
執行結果:
注:二分查詢演算法要比順序查詢演算法更為有效。在二分查詢中,比較的次數取決於所要查詢的元素在陣列中的位置。對於n個元素的陣列,最差的情況為:查詢到區間只剩下一個元素或者根本不存在
當搜尋區間變為只剩下一個元素時:
n
/
2
/
2
/
.
.
.
/
2
/
2
=
1
;
(
k
個
2
)
n/2/2/.../2/2=1;(k個2)
n/2/2/.../2/2=1;(k個2)
則
n
=
2
k
n=2^k
n=2k
即
k
=
l
b
n
k=lb n
k=lbn
所以使用二分查詢最多隻需要比較lbn次就可以了.
比較:
n | lbn |
---|---|
10 | 3 |
100 | 7 |
1000 | 10 |
1000000 | 20 |
1000000000 | 30 |
對於小的陣列,兩個數值差別不大,兩種演算法都能很好的完成任務,但是當資料較大時,二分查詢法便能節約大量時間。