1. 程式人生 > >順序查詢、折半查詢

順序查詢、折半查詢

#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;
}