정적 검색

4383 단어 code
#include "stdio.h"    
#include "stdlib.h"   
#include "io.h"  
#include "math.h"  
#include "time.h"

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 100 /*           */

typedef int Status;    /* Status      ,           , OK  */ 

int F[100]; /*        */

/*        ,a   ,n         ,key         */
int Sequential_Search(int *a,int n,int key)
{
    int i;
    for(i=1;i<=n;i++)
    {
        if (a[i]==key)
            return i;
    }
    return 0;
}
/*         */
int Sequential_Search2(int *a,int n,int key)
{
    int i;
    a[0]=key;
    i=n;
    while(a[i]!=key)
    {
        i--;
    }
    return i;
}

/*      */
int Binary_Search(int *a,int n,int key)
{
    int low,high,mid;
    low=1;    /*             */
    high=n;    /*             */
    while(low<=high)
    {
        mid=(low+high)/2;    /*    */
        if (keyhigh=mid-1;        /* 최고 아래 첨자에서 중위 아래 첨자 작게 조정*/
else if(key>a[mid])/* 검색 값이 중간값보다 크면 */
low=mid+1;        /* 최저 하단을 중위 하단으로 조정*/
else
{
return mid;        /* 만약 같다면mid가 찾은 위치*/
}
}
return 0;
}
/* 보간 찾기 */
int Interpolation_Search(int *a,int n,int key)
{
int low,high,mid;
low=1;    /* 최소 아래 로깅 첫 번째 */ 정의
high=n;    /* 레코드 최하위로 정의*/
while(low<=high)
{
mid=low+ (high-low)*(key-a[low])/(a[high]-a[low]); /* 보간*/
if (keyhigh=mid-1;        /* 아래 첨자를 보간법 아래 첨자로 한 자릿수 작게 조정*/
else if(key>a[mid])/* 삽입값보다 큰 값을 찾으면 */
low=mid+1;        /* 최소 아래 첨자를 보간 값 아래 첨자 크기로 조정*/
else
return mid;        /* 만약 같다면mid가 찾은 위치*/
}
return 0;
}
/* 피보나치 찾기*/
int Fibonacci_Search(int *a,int n,int key)
{
int low,high,mid,i,k=0;
low=1;    /* 최소 아래 로깅 첫 번째 */ 정의
high=n;    /* 레코드 최하위로 정의*/
while(n>F[k]-1)
k++;
for (i=n;i
a[i]=a[n];
while(low<=high)
{
mid=low+F[k-1]-1;
if (key{
high=mid-1;        
k=k-1;
}
else if (key>a[mid])
{
low=mid+1;        
k=k-2;
}
else
{
if (mid<=n)
return mid;        /* 만약 같다면mid가 찾은 위치*/
else 
return n;
}
}
return 0;
}
int main(void)
{    
int a[MAXSIZE+1],i,result;
int arr[MAXSIZE]={0,1,16,24,35,47,59,62,73,88,99};
for(i=0;i<=MAXSIZE;i++)
{
a[i]=i;
}
result=Sequential_Search(a,MAXSIZE,MAXSIZE);
printf("Sequential_Search:%d ",result);
result=Sequential_Search2(a,MAXSIZE,1);
printf("Sequential_Search2:%d ",result);
result=Binary_Search(arr,10,62);
printf("Binary_Search:%d ",result);
result=Interpolation_Search(arr,10,62);
printf("Interpolation_Search:%d ",result);
F[0]=0;
F[1]=1;
for(i = 2;i < 100;i++)  
{ 
F[i] = F[i-1] + F[i-2];  
} 
result=Fibonacci_Search(arr,10,62);
printf("Fibonacci_Search:%d ",result);
return 0;
}

좋은 웹페이지 즐겨찾기