順序查詢、折半查詢
#include "stdafx.h"
#include <iostream>
using namespace std;
//順序查詢:依次遍歷查詢與value相同的值(無論有序、無序):O(n)
int SequenceSearch(int array[], int value, int n)
{
for (int i = 0; i < n; i++)
{
if (array[i] == value)
{
return i + 1;
}
}
return -1;
}
//折半查詢(序列有序):O(log(n))
int BinarySearch1(int array[], int value, int n)
{
int low, high, mid;
low = 0;
high = n - 1;
while (low <= high)
{
mid = (low + high) / 2;
if (array[mid] == value)
return mid+1;
else if (array[mid] < value)
{
low = mid + 1;
}
else
high = mid - 1;
}
return -1;
}
int BinarySearch2(int array[], int value, int low ,int high) //遞迴求解
{
while (low < high)
{
int mid = (low + high) / 2;
if (array[mid] == value)
return mid+1;
else if (array[mid] < value)
return BinarySearch2(array, value, mid + 1, high);
else
return BinarySearch2(array, value, low, mid-1);
}
return -1;
}
int main()
{
int a[5];
int i = 0;
//輸入陣列
while (i<5)
{
cin >> a[i];
i++;
}
//輸入查詢值
int x;
cin >> x;
//順序查詢
int v1 = SequenceSearch(a,x, i);
cout << v1 << endl;
cout << BinarySearch1(a, x,i) << endl;
cout << BinarySearch2(a, x, 0, i-1) <<endl;
system("pause");
return 0;
}