#include<iostream>
using namespace std;
//顺序查找时间复杂度O(n)
int Sequential_Search(int *a, int n, int k) {
for (int i = 1; i < n; i++) {
if (a[i] == k)
return i;
}
return 0;
}
int Sequential_Search2(int *a, int n, int k) {
a[0] = k;
int i = n-1;
while (a[i]!=k)
{
i--;
}
return i;
}
//二分查找时间复杂度O(log n)
int Binary_Search(int *a, int n, int k) {
int left = 1;
int right = n - 1;
while (left<=right)
{
int mid = (left + right) / 2;
if (a[mid] == k)
return mid;
else if (k < a[mid])
right = mid-1;
else
left = mid + 1;
}
return 0;
}
//插入查找时间复杂度O(log n)
int Insert_Search(int *a, int n, int k) {
int left = 1;
int right = n - 1;
while (left <= right)
{
int mid = left+((k-a[left])/(a[right]-a[left]))*(right-left);
if (a[mid] == k)
return mid;
else if (k < a[mid])
right = mid - 1;
else
left = mid + 1;
}
return 0;
}
int main() {
int a[] = { 0,1,16,24,35,47,59,62,73,88,99 };
cout << Sequential_Search(a, 11, 59) << endl;
cout << Sequential_Search2(a,11, 59) << endl;
cout << Binary_Search(a, 11 , 59) << endl;
cout << Insert_Search(a, 11, 59) << endl;
return 0;
}
参考:《大话数据结构》